[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / Transforms / CorrelatedValuePropagation / and.ll
blobcc593783b044939feeaa07e16ef461da07818984
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s
4 define i32 @test(i32 %a) {
5 ; CHECK-LABEL: @test(
6 ; CHECK-NEXT:  entry:
7 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 128
8 ; CHECK-NEXT:    br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]
9 ; CHECK:       continue:
10 ; CHECK-NEXT:    ret i32 [[A]]
11 ; CHECK:       exit:
12 ; CHECK-NEXT:    ret i32 -1
14 entry:
15   %cmp = icmp ult i32 %a, 128
16   br i1 %cmp, label %continue, label %exit
17 continue:
18   %and = and i32 %a, 255
19   ret i32 %and
20 exit:
21   ret i32 -1
24 define i32 @test2(i32 %a) {
25 ; CHECK-LABEL: @test2(
26 ; CHECK-NEXT:  entry:
27 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 256
28 ; CHECK-NEXT:    br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]
29 ; CHECK:       continue:
30 ; CHECK-NEXT:    ret i32 [[A]]
31 ; CHECK:       exit:
32 ; CHECK-NEXT:    ret i32 -1
34 entry:
35   %cmp = icmp ult i32 %a, 256
36   br i1 %cmp, label %continue, label %exit
37 continue:
38   %and = and i32 %a, 255
39   ret i32 %and
40 exit:
41   ret i32 -1
44 define i32 @test3(i32 %a) {
45 ; CHECK-LABEL: @test3(
46 ; CHECK-NEXT:  entry:
47 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 256
48 ; CHECK-NEXT:    br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]
49 ; CHECK:       continue:
50 ; CHECK-NEXT:    ret i32 [[A]]
51 ; CHECK:       exit:
52 ; CHECK-NEXT:    ret i32 -1
54 entry:
55   %cmp = icmp ult i32 %a, 256
56   br i1 %cmp, label %continue, label %exit
57 continue:
58   %and = and i32 %a, 1023
59   ret i32 %and
60 exit:
61   ret i32 -1
65 define i32 @neg1(i32 %a) {
66 ; CHECK-LABEL: @neg1(
67 ; CHECK-NEXT:  entry:
68 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i32 [[A:%.*]], 256
69 ; CHECK-NEXT:    br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]
70 ; CHECK:       continue:
71 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[A]], 255
72 ; CHECK-NEXT:    ret i32 [[AND]]
73 ; CHECK:       exit:
74 ; CHECK-NEXT:    ret i32 -1
76 entry:
77   %cmp = icmp ule i32 %a, 256
78   br i1 %cmp, label %continue, label %exit
79 continue:
80   %and = and i32 %a, 255
81   ret i32 %and
82 exit:
83   ret i32 -1
86 define i32 @neg2(i32 %a) {
87 ; CHECK-LABEL: @neg2(
88 ; CHECK-NEXT:  entry:
89 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 513
90 ; CHECK-NEXT:    br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]
91 ; CHECK:       continue:
92 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[A]], 255
93 ; CHECK-NEXT:    ret i32 [[AND]]
94 ; CHECK:       exit:
95 ; CHECK-NEXT:    ret i32 -1
97 entry:
98   %cmp = icmp ult i32 %a, 513
99   br i1 %cmp, label %continue, label %exit
100 continue:
101   %and = and i32 %a, 255
102   ret i32 %and
103 exit:
104   ret i32 -1
107 define i32 @neg3(i32 %a) {
108 ; CHECK-LABEL: @neg3(
109 ; CHECK-NEXT:  entry:
110 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[A:%.*]], 256
111 ; CHECK-NEXT:    br i1 [[CMP]], label [[CONTINUE:%.*]], label [[EXIT:%.*]]
112 ; CHECK:       continue:
113 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[A]], 254
114 ; CHECK-NEXT:    ret i32 [[AND]]
115 ; CHECK:       exit:
116 ; CHECK-NEXT:    ret i32 -1
118 entry:
119   %cmp = icmp ult i32 %a, 256
120   br i1 %cmp, label %continue, label %exit
121 continue:
122   %and = and i32 %a, 254
123   ret i32 %and
124 exit:
125   ret i32 -1