|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
1 | 2 | ; RUN: opt < %s -passes=sccp -S | FileCheck %s
|
2 | 3 |
|
3 | 4 | define i1 @float.1(i1 %cmp) {
|
4 |
| -; CHECK-LABEL: define i1 @float.1(i1 %cmp) { |
5 |
| - |
6 |
| -; CHECK-LABEL: end: |
| 5 | +; CHECK-LABEL: define i1 @float.1( |
| 6 | +; CHECK-SAME: i1 [[CMP:%.*]]) { |
| 7 | +; CHECK-NEXT: [[ENTRY:.*:]] |
| 8 | +; CHECK-NEXT: br i1 [[CMP]], label %[[IF_TRUE:.*]], label %[[END:.*]] |
| 9 | +; CHECK: [[IF_TRUE]]: |
| 10 | +; CHECK-NEXT: br label %[[END]] |
| 11 | +; CHECK: [[END]]: |
7 | 12 | ; CHECK-NEXT: ret i1 true
|
8 | 13 | ;
|
9 | 14 | entry:
|
|
19 | 24 | }
|
20 | 25 |
|
21 | 26 | define i1 @float.2(i1 %cmp) {
|
22 |
| -; CHECK-LABEL: define i1 @float.2(i1 %cmp) { |
23 |
| - |
24 |
| -; CHECK-LABEL: end: |
25 |
| -; CHECK-NEXT: %p = phi float [ 1.000000e+00, %entry ], [ 2.000000e+00, %if.true ] |
26 |
| -; CHECK-NEXT: %c = fcmp ueq float %p, 1.000000e+00 |
27 |
| -; CHECK-NEXT: ret i1 %c |
| 27 | +; CHECK-LABEL: define i1 @float.2( |
| 28 | +; CHECK-SAME: i1 [[CMP:%.*]]) { |
| 29 | +; CHECK-NEXT: [[ENTRY:.*]]: |
| 30 | +; CHECK-NEXT: br i1 [[CMP]], label %[[IF_TRUE:.*]], label %[[END:.*]] |
| 31 | +; CHECK: [[IF_TRUE]]: |
| 32 | +; CHECK-NEXT: br label %[[END]] |
| 33 | +; CHECK: [[END]]: |
| 34 | +; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, %[[ENTRY]] ], [ 2.000000e+00, %[[IF_TRUE]] ] |
| 35 | +; CHECK-NEXT: [[C:%.*]] = fcmp ueq float [[P]], 1.000000e+00 |
| 36 | +; CHECK-NEXT: ret i1 [[C]] |
28 | 37 | ;
|
29 | 38 | entry:
|
30 | 39 | br i1 %cmp, label %if.true, label %end
|
|
39 | 48 | }
|
40 | 49 |
|
41 | 50 | define i1 @float.3(float %f, i1 %cmp) {
|
42 |
| -; CHECK-LABEL: define i1 @float.3(float %f, i1 %cmp) |
43 |
| - |
44 |
| -; CHECK-LABEL: end: |
45 |
| -; CHECK-NEXT: %p = phi float [ 1.000000e+00, %entry ], [ %f, %if.true ] |
46 |
| -; CHECK-NEXT: %c = fcmp ueq float %p, 1.000000e+00 |
47 |
| -; CHECK-NEXT: ret i1 %c |
| 51 | +; CHECK-LABEL: define i1 @float.3( |
| 52 | +; CHECK-SAME: float [[F:%.*]], i1 [[CMP:%.*]]) { |
| 53 | +; CHECK-NEXT: [[ENTRY:.*]]: |
| 54 | +; CHECK-NEXT: br i1 [[CMP]], label %[[IF_TRUE:.*]], label %[[END:.*]] |
| 55 | +; CHECK: [[IF_TRUE]]: |
| 56 | +; CHECK-NEXT: br label %[[END]] |
| 57 | +; CHECK: [[END]]: |
| 58 | +; CHECK-NEXT: [[P:%.*]] = phi float [ 1.000000e+00, %[[ENTRY]] ], [ [[F]], %[[IF_TRUE]] ] |
| 59 | +; CHECK-NEXT: [[C:%.*]] = fcmp ueq float [[P]], 1.000000e+00 |
| 60 | +; CHECK-NEXT: ret i1 [[C]] |
48 | 61 | ;
|
| 62 | + |
49 | 63 | entry:
|
50 | 64 | br i1 %cmp, label %if.true, label %end
|
51 | 65 |
|
|
60 | 74 |
|
61 | 75 |
|
62 | 76 | define i1 @float.4_unreachable(float %f, i1 %cmp) {
|
63 |
| -; CHECK-LABEL: define i1 @float.4_unreachable(float %f, i1 %cmp) |
64 |
| - |
65 |
| -; CHECK-LABEL: end: |
| 77 | +; CHECK-LABEL: define i1 @float.4_unreachable( |
| 78 | +; CHECK-SAME: float [[F:%.*]], i1 [[CMP:%.*]]) { |
| 79 | +; CHECK-NEXT: [[ENTRY:.*:]] |
| 80 | +; CHECK-NEXT: br i1 [[CMP]], label %[[IF_TRUE:.*]], label %[[END:.*]] |
| 81 | +; CHECK: [[IF_TRUE]]: |
| 82 | +; CHECK-NEXT: br label %[[END]] |
| 83 | +; CHECK: [[END]]: |
66 | 84 | ; CHECK-NEXT: ret i1 false
|
67 | 85 | ;
|
| 86 | + |
68 | 87 | entry:
|
69 | 88 | br i1 %cmp, label %if.true, label %end
|
70 | 89 |
|
|
79 | 98 | %c = fcmp une float %p, 1.0
|
80 | 99 | ret i1 %c
|
81 | 100 | }
|
| 101 | + |
| 102 | +define <2 x i16> @phi_vector_merge1(i1 %c, <2 x i8> %a) { |
| 103 | +; CHECK-LABEL: define <2 x i16> @phi_vector_merge1( |
| 104 | +; CHECK-SAME: i1 [[C:%.*]], <2 x i8> [[A:%.*]]) { |
| 105 | +; CHECK-NEXT: [[ENTRY:.*]]: |
| 106 | +; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16> |
| 107 | +; CHECK-NEXT: br i1 [[C]], label %[[IF:.*]], label %[[JOIN:.*]] |
| 108 | +; CHECK: [[IF]]: |
| 109 | +; CHECK-NEXT: br label %[[JOIN]] |
| 110 | +; CHECK: [[JOIN]]: |
| 111 | +; CHECK-NEXT: [[PHI:%.*]] = phi <2 x i16> [ [[ZEXT]], %[[ENTRY]] ], [ <i16 1, i16 2>, %[[IF]] ] |
| 112 | +; CHECK-NEXT: [[ADD:%.*]] = add <2 x i16> [[PHI]], <i16 2, i16 3> |
| 113 | +; CHECK-NEXT: ret <2 x i16> [[ADD]] |
| 114 | +; |
| 115 | +entry: |
| 116 | + %zext = zext <2 x i8> %a to <2 x i16> |
| 117 | + br i1 %c, label %if, label %join |
| 118 | + |
| 119 | +if: |
| 120 | + br label %join |
| 121 | + |
| 122 | +join: |
| 123 | + %phi = phi <2 x i16> [ %zext, %entry ], [ <i16 1, i16 2>, %if ] |
| 124 | + %add = add <2 x i16> %phi, <i16 2, i16 3> |
| 125 | + ret <2 x i16> %add |
| 126 | +} |
| 127 | + |
| 128 | +define <2 x i16> @phi_vector_merge2(i1 %c, <2 x i8> %a) { |
| 129 | +; CHECK-LABEL: define <2 x i16> @phi_vector_merge2( |
| 130 | +; CHECK-SAME: i1 [[C:%.*]], <2 x i8> [[A:%.*]]) { |
| 131 | +; CHECK-NEXT: [[ENTRY:.*]]: |
| 132 | +; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i8> [[A]] to <2 x i16> |
| 133 | +; CHECK-NEXT: br i1 [[C]], label %[[IF:.*]], label %[[JOIN:.*]] |
| 134 | +; CHECK: [[IF]]: |
| 135 | +; CHECK-NEXT: br label %[[JOIN]] |
| 136 | +; CHECK: [[JOIN]]: |
| 137 | +; CHECK-NEXT: [[PHI:%.*]] = phi <2 x i16> [ <i16 1, i16 2>, %[[ENTRY]] ], [ [[ZEXT]], %[[IF]] ] |
| 138 | +; CHECK-NEXT: [[ADD:%.*]] = add <2 x i16> [[PHI]], <i16 2, i16 3> |
| 139 | +; CHECK-NEXT: ret <2 x i16> [[ADD]] |
| 140 | +; |
| 141 | +entry: |
| 142 | + %zext = zext <2 x i8> %a to <2 x i16> |
| 143 | + br i1 %c, label %if, label %join |
| 144 | + |
| 145 | +if: |
| 146 | + br label %join |
| 147 | + |
| 148 | +join: |
| 149 | + %phi = phi <2 x i16> [ <i16 1, i16 2>, %entry ], [ %zext, %if ] |
| 150 | + %add = add <2 x i16> %phi, <i16 2, i16 3> |
| 151 | + ret <2 x i16> %add |
| 152 | +} |
| 153 | + |
| 154 | +define <2 x float> @phi_vector_merge_float(i1 %c) { |
| 155 | +; CHECK-LABEL: define <2 x float> @phi_vector_merge_float( |
| 156 | +; CHECK-SAME: i1 [[C:%.*]]) { |
| 157 | +; CHECK-NEXT: [[ENTRY:.*]]: |
| 158 | +; CHECK-NEXT: br i1 [[C]], label %[[IF:.*]], label %[[JOIN:.*]] |
| 159 | +; CHECK: [[IF]]: |
| 160 | +; CHECK-NEXT: br label %[[JOIN]] |
| 161 | +; CHECK: [[JOIN]]: |
| 162 | +; CHECK-NEXT: [[PHI:%.*]] = phi <2 x float> [ <float 2.000000e+00, float 1.000000e+00>, %[[ENTRY]] ], [ <float 1.000000e+00, float 2.000000e+00>, %[[IF]] ] |
| 163 | +; CHECK-NEXT: ret <2 x float> [[PHI]] |
| 164 | +; |
| 165 | +entry: |
| 166 | + br i1 %c, label %if, label %join |
| 167 | + |
| 168 | +if: |
| 169 | + br label %join |
| 170 | + |
| 171 | +join: |
| 172 | + %phi = phi <2 x float> [ <float 2.0, float 1.0>, %entry ], [ <float 1.0, float 2.0>, %if ] |
| 173 | + ret <2 x float> %phi |
| 174 | +} |
0 commit comments