[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / Hexagon / tfr-cleanup.ll
bloba576812c67da2649f28b4bbf0c1dc9eaa4f2c3af
1 ; RUN: llc -march=hexagon -O3 -hexagon-eif=0 < %s | FileCheck %s
2 ; Without TFR cleanup, the last block contained
3 ; {
4 ;   r3 = xor(r1, r2)
5 ;   r1 = #0
6 ; }
7 ; {
8 ;   r7 = r1
9 ;   r0 = zxtb(r3)
10 ; }
11 ; After TFR cleanup, the copy "r7 = r1" should be simplified to "r7 = #0".
12 ; There shouldn't be any register copies in that block anymore.
14 ; CHECK: LBB0_5:
15 ; CHECK-NOT: r{{[0-9]+}} = r{{[0-9]+}}
17 target triple = "hexagon"
19 ; Function Attrs: nounwind readnone
20 define i64 @f0(i64 %a0, i32 %a1, i32 %a2) #0 {
21 b0:
22   %v0 = trunc i64 %a0 to i32
23   %v1 = lshr i64 %a0, 32
24   %v2 = trunc i64 %v1 to i32
25   %v3 = lshr i64 %a0, 40
26   %v4 = lshr i64 %a0, 48
27   %v5 = trunc i64 %v4 to i16
28   %v6 = icmp sgt i32 %a2, %a1
29   %v7 = lshr i32 %v0, 10
30   br i1 %v6, label %b1, label %b2
32 b1:                                               ; preds = %b0
33   %v8 = add nsw i32 %v7, 4190971
34   %v9 = and i32 %v8, 4194303
35   %v10 = shl nuw nsw i64 %v3, 24
36   %v11 = trunc i64 %v10 to i32
37   %v12 = ashr exact i32 %v11, 24
38   %v13 = or i32 %v12, 102
39   br label %b3
41 b2:                                               ; preds = %b0
42   %v14 = add nsw i32 %v7, 4189760
43   %v15 = trunc i64 %v3 to i32
44   %v16 = or i32 %v15, 119
45   br label %b3
47 b3:                                               ; preds = %b2, %b1
48   %v17 = phi i32 [ %v13, %b1 ], [ %v16, %b2 ]
49   %v18 = phi i32 [ %v9, %b1 ], [ %v14, %b2 ]
50   %v19 = shl i32 %v18, 10
51   %v20 = icmp sgt i32 %a1, %a2
52   br i1 %v20, label %b4, label %b5
54 b4:                                               ; preds = %b3
55   %v21 = and i32 %v2, 140
56   %v22 = or i32 %v21, 115
57   %v23 = and i16 %v5, 12345
58   br label %b6
60 b5:                                               ; preds = %b3
61   %v24 = xor i32 %v2, 23
62   %v25 = or i16 %v5, 12345
63   br label %b6
65 b6:                                               ; preds = %b5, %b4
66   %v26 = phi i16 [ %v23, %b4 ], [ %v25, %b5 ]
67   %v27 = phi i32 [ %v22, %b4 ], [ %v24, %b5 ]
68   %v28 = zext i16 %v26 to i64
69   %v29 = shl nuw i64 %v28, 48
70   %v30 = and i32 %v27, 255
71   %v31 = zext i32 %v30 to i64
72   %v32 = shl nuw nsw i64 %v31, 40
73   %v33 = and i32 %v17, 255
74   %v34 = zext i32 %v33 to i64
75   %v35 = shl nuw nsw i64 %v34, 32
76   %v36 = zext i32 %v19 to i64
77   %v37 = or i64 %v36, %v35
78   %v38 = or i64 %v37, %v29
79   %v39 = or i64 %v38, %v32
80   ret i64 %v39
83 attributes #0 = { nounwind readnone "target-cpu"="hexagonv55" }