|
68 | 68 | exit: |
69 | 69 | ret void |
70 | 70 | } |
| 71 | + |
| 72 | +define i32 @induction_trunc_wrapflags(ptr %p) { |
| 73 | +; CHECK-LABEL: define i32 @induction_trunc_wrapflags( |
| 74 | +; CHECK-SAME: ptr [[P:%.*]]) { |
| 75 | +; CHECK-NEXT: [[ENTRY:.*:]] |
| 76 | +; CHECK-NEXT: br label %[[VECTOR_PH:.*]] |
| 77 | +; CHECK: [[VECTOR_PH]]: |
| 78 | +; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] |
| 79 | +; CHECK: [[VECTOR_BODY]]: |
| 80 | +; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ] |
| 81 | +; CHECK-NEXT: [[VEC_IND:%.*]] = phi <4 x i8> [ <i8 -72, i8 -68, i8 -64, i8 -60>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY]] ] |
| 82 | +; CHECK-NEXT: [[OFFSET_IDX:%.*]] = sub i64 326, [[INDEX]] |
| 83 | +; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[P]], i64 [[OFFSET_IDX]] |
| 84 | +; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i32 0 |
| 85 | +; CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[TMP1]], i32 -3 |
| 86 | +; CHECK-NEXT: [[REVERSE:%.*]] = shufflevector <4 x i8> [[VEC_IND]], <4 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0> |
| 87 | +; CHECK-NEXT: store <4 x i8> [[REVERSE]], ptr [[TMP2]], align 1 |
| 88 | +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4 |
| 89 | +; CHECK-NEXT: [[VEC_IND_NEXT]] = add nsw <4 x i8> [[VEC_IND]], splat (i8 16) |
| 90 | +; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i64 [[INDEX_NEXT]], 324 |
| 91 | +; CHECK-NEXT: br i1 [[TMP3]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]] |
| 92 | +; CHECK: [[MIDDLE_BLOCK]]: |
| 93 | +; CHECK-NEXT: br label %[[SCALAR_PH:.*]] |
| 94 | +; CHECK: [[SCALAR_PH]]: |
| 95 | +; |
| 96 | +entry: |
| 97 | + br label %loop |
| 98 | + |
| 99 | +loop: |
| 100 | + %iv = phi i64 [ 326, %entry ], [ %iv.next, %loop ] |
| 101 | + %ind = phi i64 [ -72, %entry ], [ %ind.next, %loop ] |
| 102 | + %trunc = trunc i64 %ind to i8 |
| 103 | + %gep.p.iv = getelementptr i8, ptr %p, i64 %iv |
| 104 | + store i8 %trunc, ptr %gep.p.iv, align 1 |
| 105 | + %ind.next = add nsw i64 %ind, 4 |
| 106 | + %iv.next = add i64 %iv, -1 |
| 107 | + %ec = icmp eq i64 %iv, 0 |
| 108 | + br i1 %ec, label %exit, label %loop |
| 109 | + |
| 110 | +exit: |
| 111 | + ret i32 0 |
| 112 | +} |
0 commit comments