|
5 | 5 | ; The problem is that there is a linear use of the induction variable, i*3+j, |
6 | 6 | ; but only the part i*3 is used for indexing. |
7 | 7 |
|
8 | | -define void @test0(i16* %0, i16* %1) { |
| 8 | +define void @test0(ptr %arg, ptr %arg1) { |
9 | 9 | ; CHECK-LABEL: @test0( |
| 10 | +; CHECK-NEXT: bb: |
10 | 11 | ; CHECK-NEXT: [[FLATTEN_TRIPCOUNT:%.*]] = mul i64 3, 2 |
11 | 12 | ; CHECK-NEXT: br label [[DOTPREHEADER:%.*]] |
12 | 13 | ; CHECK: .preheader: |
13 | | -; CHECK-NEXT: [[TMP3:%.*]] = phi i64 [ 0, [[TMP2:%.*]] ], [ [[TMP7:%.*]], [[TMP6:%.*]] ] |
14 | | -; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP3]], 3 |
15 | | -; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i16, ptr [[TMP1:%.*]], i64 [[TMP4]] |
16 | | -; CHECK-NEXT: br label [[TMP9:%.*]] |
17 | | -; CHECK: 6: |
18 | | -; CHECK-NEXT: [[TMP7]] = add i64 [[TMP3]], 1 |
19 | | -; CHECK-NEXT: [[TMP8:%.*]] = icmp slt i64 [[TMP7]], [[FLATTEN_TRIPCOUNT]] |
20 | | -; CHECK-NEXT: br i1 [[TMP8]], label [[DOTPREHEADER]], label [[TMP16:%.*]] |
21 | | -; CHECK: 9: |
22 | | -; CHECK-NEXT: [[TMP10:%.*]] = phi i64 [ 0, [[DOTPREHEADER]] ] |
23 | | -; CHECK-NEXT: [[TMP11:%.*]] = load i16, ptr [[TMP5]], align 2 |
24 | | -; CHECK-NEXT: [[TMP12:%.*]] = add i64 [[TMP10]], [[TMP4]] |
25 | | -; CHECK-NEXT: [[TMP13:%.*]] = getelementptr i16, ptr [[TMP0:%.*]], i64 [[TMP3]] |
26 | | -; CHECK-NEXT: store i16 [[TMP11]], ptr [[TMP13]], align 2 |
27 | | -; CHECK-NEXT: [[TMP14:%.*]] = add nuw nsw i64 [[TMP10]], 1 |
28 | | -; CHECK-NEXT: [[TMP15:%.*]] = icmp ult i64 [[TMP14]], 3 |
29 | | -; CHECK-NEXT: br label [[TMP6]] |
30 | | -; CHECK: 16: |
| 14 | +; CHECK-NEXT: [[I:%.*]] = phi i64 [ 0, [[BB:%.*]] ], [ [[I5:%.*]], [[BB4:%.*]] ] |
| 15 | +; CHECK-NEXT: [[I2:%.*]] = mul i64 [[I]], 3 |
| 16 | +; CHECK-NEXT: [[I3:%.*]] = getelementptr i16, ptr [[ARG1:%.*]], i64 [[I2]] |
| 17 | +; CHECK-NEXT: br label [[BB7:%.*]] |
| 18 | +; CHECK: bb4: |
| 19 | +; CHECK-NEXT: [[I5]] = add i64 [[I]], 1 |
| 20 | +; CHECK-NEXT: [[I6:%.*]] = icmp slt i64 [[I5]], [[FLATTEN_TRIPCOUNT]] |
| 21 | +; CHECK-NEXT: br i1 [[I6]], label [[DOTPREHEADER]], label [[BB14:%.*]] |
| 22 | +; CHECK: bb7: |
| 23 | +; CHECK-NEXT: [[I8:%.*]] = phi i64 [ 0, [[DOTPREHEADER]] ] |
| 24 | +; CHECK-NEXT: [[I9:%.*]] = load i16, ptr [[I3]], align 2 |
| 25 | +; CHECK-NEXT: [[I10:%.*]] = add i64 [[I8]], [[I2]] |
| 26 | +; CHECK-NEXT: [[I11:%.*]] = getelementptr i16, ptr [[ARG:%.*]], i64 [[I]] |
| 27 | +; CHECK-NEXT: store i16 [[I9]], ptr [[I11]], align 2 |
| 28 | +; CHECK-NEXT: [[I12:%.*]] = add nuw nsw i64 [[I8]], 1 |
| 29 | +; CHECK-NEXT: [[I13:%.*]] = icmp ult i64 [[I12]], 3 |
| 30 | +; CHECK-NEXT: br label [[BB4]] |
| 31 | +; CHECK: bb14: |
31 | 32 | ; CHECK-NEXT: ret void |
32 | 33 | ; |
33 | | -2: |
| 34 | +bb: |
34 | 35 | br label %.preheader |
35 | 36 |
|
36 | | -.preheader: |
37 | | - %3 = phi i64 [ 0, %2 ], [ %7, %6 ] |
38 | | - %4 = mul i64 %3, 3 |
39 | | - %5 = getelementptr i16, ptr %1, i64 %4 |
40 | | - br label %9 |
| 37 | +.preheader: ; preds = %bb4, %bb |
| 38 | + %i = phi i64 [ 0, %bb ], [ %i5, %bb4 ] |
| 39 | + %i2 = mul i64 %i, 3 |
| 40 | + %i3 = getelementptr i16, ptr %arg1, i64 %i2 |
| 41 | + br label %bb7 |
41 | 42 |
|
42 | | -6: |
43 | | - %7 = add i64 %3, 1 |
44 | | - %8 = icmp slt i64 %7, 2 |
45 | | - br i1 %8, label %.preheader, label %16 |
| 43 | +bb4: ; preds = %bb7 |
| 44 | + %i5 = add i64 %i, 1 |
| 45 | + %i6 = icmp slt i64 %i5, 2 |
| 46 | + br i1 %i6, label %.preheader, label %bb14 |
46 | 47 |
|
47 | | -9: |
48 | | - %10 = phi i64 [ 0, %.preheader ], [ %14, %9 ] |
49 | | - %11 = load i16, ptr %5, align 2 |
50 | | - %12 = add i64 %10, %4 |
51 | | - %13 = getelementptr i16, ptr %0, i64 %12 |
52 | | - store i16 %11, ptr %13, align 2 |
53 | | - %14 = add nuw nsw i64 %10, 1 |
54 | | - %15 = icmp ult i64 %14, 3 |
55 | | - br i1 %15, label %9, label %6 |
| 48 | +bb7: ; preds = %bb7, %.preheader |
| 49 | + %i8 = phi i64 [ 0, %.preheader ], [ %i12, %bb7 ] |
| 50 | + %i9 = load i16, ptr %i3, align 2 |
| 51 | + %i10 = add i64 %i8, %i2 |
| 52 | + %i11 = getelementptr i16, ptr %arg, i64 %i10 |
| 53 | + store i16 %i9, ptr %i11, align 2 |
| 54 | + %i12 = add nuw nsw i64 %i8, 1 |
| 55 | + %i13 = icmp ult i64 %i12, 3 |
| 56 | + br i1 %i13, label %bb7, label %bb4 |
56 | 57 |
|
57 | | -16: |
| 58 | +bb14: ; preds = %bb4 |
58 | 59 | ret void |
59 | 60 | } |
0 commit comments