|
45 | 45 | ret void
|
46 | 46 | }
|
47 | 47 |
|
48 |
| -; Shouldn't be vectorized |
| 48 | +; Should be vectorized - just one spill of TMP0 |
49 | 49 | define void @f1(i1 %c, ptr %p, ptr %q, ptr %r) {
|
50 | 50 | ; CHECK-LABEL: define void @f1(
|
51 | 51 | ; CHECK-SAME: i1 [[C:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]], ptr [[R:%.*]]) #[[ATTR0]] {
|
|
89 | 89 | ret void
|
90 | 90 | }
|
91 | 91 |
|
| 92 | +; Shouldn't be vectorized |
| 93 | +define void @f11(i1 %c, ptr %p, ptr %q, ptr %r) { |
| 94 | +; CHECK-LABEL: define void @f11( |
| 95 | +; CHECK-SAME: i1 [[C:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]], ptr [[R:%.*]]) #[[ATTR0]] { |
| 96 | +; CHECK-NEXT: [[ENTRY:.*:]] |
| 97 | +; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i64>, ptr [[P]], align 8 |
| 98 | +; CHECK-NEXT: [[TMP1:%.*]] = add <2 x i64> [[TMP0]], splat (i64 1) |
| 99 | +; CHECK-NEXT: br i1 [[C]], label %[[FOO:.*]], label %[[BAR:.*]] |
| 100 | +; CHECK: [[FOO]]: |
| 101 | +; CHECK-NEXT: br label %[[BAZ:.*]] |
| 102 | +; CHECK: [[BAR]]: |
| 103 | +; CHECK-NEXT: call void @g() |
| 104 | +; CHECK-NEXT: call void @g() |
| 105 | +; CHECK-NEXT: call void @g() |
| 106 | +; CHECK-NEXT: br label %[[BAZ]] |
| 107 | +; CHECK: [[BAZ]]: |
| 108 | +; CHECK-NEXT: [[TMP2:%.*]] = phi <2 x i64> [ [[TMP1]], %[[FOO]] ], [ [[TMP0]], %[[BAR]] ] |
| 109 | +; CHECK-NEXT: store <2 x i64> [[TMP2]], ptr [[Q]], align 8 |
| 110 | +; CHECK-NEXT: ret void |
| 111 | +; |
| 112 | +entry: |
| 113 | + %x0 = load i64, ptr %p |
| 114 | + %p1 = getelementptr i64, ptr %p, i64 1 |
| 115 | + %x1 = load i64, ptr %p1 |
| 116 | + %y0 = add i64 %x0, 1 |
| 117 | + %y1 = add i64 %x1, 1 |
| 118 | + br i1 %c, label %foo, label %bar |
| 119 | +foo: |
| 120 | + br label %baz |
| 121 | +bar: |
| 122 | + call void @g() |
| 123 | + call void @g() |
| 124 | + call void @g() |
| 125 | + br label %baz |
| 126 | +baz: |
| 127 | + %phi0 = phi i64 [%y0, %foo], [%x0, %bar] |
| 128 | + %phi1 = phi i64 [%y1, %foo], [%x1, %bar] |
| 129 | + store i64 %phi0, ptr %q |
| 130 | + %q1 = getelementptr i64, ptr %q, i64 1 |
| 131 | + store i64 %phi1, ptr %q1 |
| 132 | + |
| 133 | + ret void |
| 134 | +} |
| 135 | + |
92 | 136 | ; Should be vectorized
|
93 | 137 | define void @f2(i1 %c, ptr %p, ptr %q, ptr %r) {
|
94 | 138 | ; CHECK-LABEL: define void @f2(
|
|
0 commit comments