|
6 | 6 | %struct3 = type { i32, %struct4, %struct4 }
|
7 | 7 | %struct4 = type { %struct2, %struct2 }
|
8 | 8 |
|
9 |
| -define i32 @test1(ptr %dm, i1 %tmp4, i64 %tmp9, i64 %tmp19) { |
| 9 | +define i32 @test1(ptr %dm, i1 %c, i64 %idx1, i64 %idx2) { |
10 | 10 | ; CHECK-LABEL: @test1(
|
11 | 11 | ; CHECK-NEXT: bb:
|
12 |
| -; CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[DM:%.*]], align 8 |
13 |
| -; CHECK-NEXT: br i1 [[TMP4:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] |
| 12 | +; CHECK-NEXT: [[INST1:%.*]] = load ptr, ptr [[DM:%.*]], align 8 |
| 13 | +; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] |
14 | 14 | ; CHECK: bb1:
|
15 |
| -; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT2:%.*]], ptr [[TMP1]], i64 [[TMP9:%.*]] |
16 |
| -; CHECK-NEXT: store i32 0, ptr [[TMP10]], align 4 |
| 15 | +; CHECK-NEXT: [[INST10:%.*]] = getelementptr inbounds [[STRUCT2:%.*]], ptr [[INST1]], i64 [[IDX1:%.*]] |
| 16 | +; CHECK-NEXT: store i32 0, ptr [[INST10]], align 4 |
17 | 17 | ; CHECK-NEXT: br label [[BB3:%.*]]
|
18 | 18 | ; CHECK: bb2:
|
19 |
| -; CHECK-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT2]], ptr [[TMP1]], i64 [[TMP19:%.*]] |
20 |
| -; CHECK-NEXT: store i32 0, ptr [[TMP20]], align 4 |
| 19 | +; CHECK-NEXT: [[INST20:%.*]] = getelementptr inbounds [[STRUCT2]], ptr [[INST1]], i64 [[IDX2:%.*]] |
| 20 | +; CHECK-NEXT: store i32 0, ptr [[INST20]], align 4 |
21 | 21 | ; CHECK-NEXT: br label [[BB3]]
|
22 | 22 | ; CHECK: bb3:
|
23 |
| -; CHECK-NEXT: [[TMP0:%.*]] = phi i64 [ [[TMP9]], [[BB1]] ], [ [[TMP19]], [[BB2]] ] |
24 |
| -; CHECK-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT2]], ptr [[TMP1]], i64 [[TMP0]], i32 1 |
25 |
| -; CHECK-NEXT: [[TMP25:%.*]] = load i32, ptr [[TMP24]], align 4 |
26 |
| -; CHECK-NEXT: ret i32 [[TMP25]] |
| 23 | +; CHECK-NEXT: [[TMP0:%.*]] = phi i64 [ [[IDX1]], [[BB1]] ], [ [[IDX2]], [[BB2]] ] |
| 24 | +; CHECK-NEXT: [[INST24:%.*]] = getelementptr inbounds [[STRUCT2]], ptr [[INST1]], i64 [[TMP0]], i32 1 |
| 25 | +; CHECK-NEXT: [[INST25:%.*]] = load i32, ptr [[INST24]], align 4 |
| 26 | +; CHECK-NEXT: ret i32 [[INST25]] |
27 | 27 | ;
|
28 | 28 | bb:
|
29 |
| - %tmp1 = load ptr, ptr %dm, align 8 |
30 |
| - br i1 %tmp4, label %bb1, label %bb2 |
| 29 | + %inst1 = load ptr, ptr %dm, align 8 |
| 30 | + br i1 %c, label %bb1, label %bb2 |
31 | 31 |
|
32 | 32 | bb1:
|
33 |
| - %tmp10 = getelementptr inbounds %struct2, ptr %tmp1, i64 %tmp9 |
34 |
| - store i32 0, ptr %tmp10, align 4 |
| 33 | + %inst10 = getelementptr inbounds %struct2, ptr %inst1, i64 %idx1 |
| 34 | + store i32 0, ptr %inst10, align 4 |
35 | 35 | br label %bb3
|
36 | 36 |
|
37 | 37 | bb2:
|
38 |
| - %tmp20 = getelementptr inbounds %struct2, ptr %tmp1, i64 %tmp19 |
39 |
| - store i32 0, ptr %tmp20, align 4 |
| 38 | + %inst20 = getelementptr inbounds %struct2, ptr %inst1, i64 %idx2 |
| 39 | + store i32 0, ptr %inst20, align 4 |
40 | 40 | br label %bb3
|
41 | 41 |
|
42 | 42 | bb3:
|
43 |
| - %phi = phi ptr [ %tmp10, %bb1 ], [ %tmp20, %bb2 ] |
44 |
| - %tmp24 = getelementptr inbounds %struct2, ptr %phi, i64 0, i32 1 |
45 |
| - %tmp25 = load i32, ptr %tmp24, align 4 |
46 |
| - ret i32 %tmp25 |
| 43 | + %phi = phi ptr [ %inst10, %bb1 ], [ %inst20, %bb2 ] |
| 44 | + %inst24 = getelementptr inbounds %struct2, ptr %phi, i64 0, i32 1 |
| 45 | + %inst25 = load i32, ptr %inst24, align 4 |
| 46 | + ret i32 %inst25 |
47 | 47 | }
|
48 | 48 |
|
49 |
| -define i32 @test2(ptr %dm, i1 %tmp4, i64 %tmp9, i64 %tmp19) { |
| 49 | +define i32 @test2(ptr %dm, i64 %idx1, i64 %idx2) { |
50 | 50 | ; CHECK-LABEL: @test2(
|
51 | 51 | ; CHECK-NEXT: bb:
|
52 |
| -; CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[DM:%.*]], align 8 |
53 |
| -; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT2:%.*]], ptr [[TMP1]], i64 [[TMP9:%.*]] |
54 |
| -; CHECK-NEXT: store i32 0, ptr [[TMP10]], align 4 |
55 |
| -; CHECK-NEXT: [[TMP20:%.*]] = getelementptr inbounds [[STRUCT2]], ptr [[TMP1]], i64 [[TMP19:%.*]] |
56 |
| -; CHECK-NEXT: store i32 0, ptr [[TMP20]], align 4 |
57 |
| -; CHECK-NEXT: [[TMP24:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP10]], i64 4 |
58 |
| -; CHECK-NEXT: [[TMP25:%.*]] = load i32, ptr [[TMP24]], align 4 |
59 |
| -; CHECK-NEXT: ret i32 [[TMP25]] |
| 52 | +; CHECK-NEXT: [[INST1:%.*]] = load ptr, ptr [[DM:%.*]], align 8 |
| 53 | +; CHECK-NEXT: [[INST10:%.*]] = getelementptr inbounds [[STRUCT2:%.*]], ptr [[INST1]], i64 [[IDX1:%.*]] |
| 54 | +; CHECK-NEXT: store i32 0, ptr [[INST10]], align 4 |
| 55 | +; CHECK-NEXT: [[INST20:%.*]] = getelementptr inbounds [[STRUCT2]], ptr [[INST1]], i64 [[IDX2:%.*]] |
| 56 | +; CHECK-NEXT: store i32 0, ptr [[INST20]], align 4 |
| 57 | +; CHECK-NEXT: [[INST24:%.*]] = getelementptr inbounds nuw i8, ptr [[INST10]], i64 4 |
| 58 | +; CHECK-NEXT: [[INST25:%.*]] = load i32, ptr [[INST24]], align 4 |
| 59 | +; CHECK-NEXT: ret i32 [[INST25]] |
60 | 60 | ;
|
61 | 61 | bb:
|
62 |
| - %tmp1 = load ptr, ptr %dm, align 8 |
63 |
| - %tmp10 = getelementptr inbounds %struct2, ptr %tmp1, i64 %tmp9 |
64 |
| - store i32 0, ptr %tmp10, align 4 |
65 |
| - %tmp20 = getelementptr inbounds %struct2, ptr %tmp1, i64 %tmp19 |
66 |
| - store i32 0, ptr %tmp20, align 4 |
67 |
| - %tmp24 = getelementptr inbounds %struct2, ptr %tmp10, i64 0, i32 1 |
68 |
| - %tmp25 = load i32, ptr %tmp24, align 4 |
69 |
| - ret i32 %tmp25 |
| 62 | + %inst1 = load ptr, ptr %dm, align 8 |
| 63 | + %inst10 = getelementptr inbounds %struct2, ptr %inst1, i64 %idx1 |
| 64 | + store i32 0, ptr %inst10, align 4 |
| 65 | + %inst20 = getelementptr inbounds %struct2, ptr %inst1, i64 %idx2 |
| 66 | + store i32 0, ptr %inst20, align 4 |
| 67 | + %inst24 = getelementptr inbounds %struct2, ptr %inst10, i64 0, i32 1 |
| 68 | + %inst25 = load i32, ptr %inst24, align 4 |
| 69 | + ret i32 %inst25 |
70 | 70 | }
|
71 | 71 |
|
72 | 72 | ; Check that instcombine doesn't insert GEPs before landingpad.
|
73 | 73 |
|
74 |
| -define i32 @test3(ptr %dm, i1 %tmp4, i64 %tmp9, i64 %tmp19, i64 %tmp20, i64 %tmp21) personality ptr @__gxx_personality_v0 { |
| 74 | +define i32 @test3(ptr %dm, i1 %c, i64 %idx1, i64 %idx2, i64 %idx3) personality ptr @__gxx_personality_v0 { |
75 | 75 | ; CHECK-LABEL: @test3(
|
76 | 76 | ; CHECK-NEXT: bb:
|
77 |
| -; CHECK-NEXT: br i1 [[TMP4:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] |
| 77 | +; CHECK-NEXT: br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] |
78 | 78 | ; CHECK: bb1:
|
79 |
| -; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT3:%.*]], ptr [[DM:%.*]], i64 [[TMP19:%.*]], i32 1 |
80 |
| -; CHECK-NEXT: store i32 0, ptr [[TMP1]], align 4 |
| 79 | +; CHECK-NEXT: [[INST1:%.*]] = getelementptr inbounds [[STRUCT3:%.*]], ptr [[DM:%.*]], i64 [[IDX1:%.*]], i32 1 |
| 80 | +; CHECK-NEXT: store i32 0, ptr [[INST1]], align 4 |
81 | 81 | ; CHECK-NEXT: br label [[BB3:%.*]]
|
82 | 82 | ; CHECK: bb2:
|
83 |
| -; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT3]], ptr [[DM]], i64 [[TMP20:%.*]], i32 1, i32 0, i32 1 |
84 |
| -; CHECK-NEXT: store i32 0, ptr [[TMP12]], align 4 |
| 83 | +; CHECK-NEXT: [[INST12:%.*]] = getelementptr inbounds [[STRUCT3]], ptr [[DM]], i64 [[IDX2:%.*]], i32 1, i32 0, i32 1 |
| 84 | +; CHECK-NEXT: store i32 0, ptr [[INST12]], align 4 |
85 | 85 | ; CHECK-NEXT: br label [[BB3]]
|
86 | 86 | ; CHECK: bb3:
|
87 |
| -; CHECK-NEXT: [[TMP0:%.*]] = phi i64 [ [[TMP19]], [[BB1]] ], [ [[TMP20]], [[BB2]] ] |
88 |
| -; CHECK-NEXT: [[TMP22:%.*]] = invoke i32 @foo1(i32 11) |
| 87 | +; CHECK-NEXT: [[TMP0:%.*]] = phi i64 [ [[IDX1]], [[BB1]] ], [ [[IDX2]], [[BB2]] ] |
| 88 | +; CHECK-NEXT: [[INST22:%.*]] = invoke i32 @foo1(i32 11) |
89 | 89 | ; CHECK-NEXT: to label [[BB4:%.*]] unwind label [[BB5:%.*]]
|
90 | 90 | ; CHECK: bb4:
|
91 | 91 | ; CHECK-NEXT: ret i32 0
|
92 | 92 | ; CHECK: bb5:
|
93 |
| -; CHECK-NEXT: [[TMP27:%.*]] = landingpad { ptr, i32 } |
| 93 | +; CHECK-NEXT: [[INST27:%.*]] = landingpad { ptr, i32 } |
94 | 94 | ; CHECK-NEXT: catch ptr @_ZTIi
|
95 | 95 | ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT3]], ptr [[DM]], i64 [[TMP0]], i32 1
|
96 |
| -; CHECK-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT4:%.*]], ptr [[TMP1]], i64 [[TMP21:%.*]], i32 1, i32 1 |
97 |
| -; CHECK-NEXT: [[TMP25:%.*]] = load i32, ptr [[TMP35]], align 4 |
98 |
| -; CHECK-NEXT: ret i32 [[TMP25]] |
| 96 | +; CHECK-NEXT: [[INST35:%.*]] = getelementptr inbounds [[STRUCT4:%.*]], ptr [[TMP1]], i64 [[IDX3:%.*]], i32 1, i32 1 |
| 97 | +; CHECK-NEXT: [[INST25:%.*]] = load i32, ptr [[INST35]], align 4 |
| 98 | +; CHECK-NEXT: ret i32 [[INST25]] |
99 | 99 | ;
|
100 | 100 | bb:
|
101 |
| - br i1 %tmp4, label %bb1, label %bb2 |
| 101 | + br i1 %c, label %bb1, label %bb2 |
102 | 102 |
|
103 | 103 | bb1:
|
104 |
| - %tmp1 = getelementptr inbounds %struct3, ptr %dm, i64 %tmp19, i32 1 |
105 |
| - store i32 0, ptr %tmp1, align 4 |
| 104 | + %inst1 = getelementptr inbounds %struct3, ptr %dm, i64 %idx1, i32 1 |
| 105 | + store i32 0, ptr %inst1, align 4 |
106 | 106 | br label %bb3
|
107 | 107 |
|
108 | 108 | bb2:
|
109 |
| - %tmp2 = getelementptr inbounds %struct3, ptr %dm, i64 %tmp20, i32 1 |
110 |
| - %tmp12 = getelementptr inbounds %struct4, ptr %tmp2, i64 0, i32 0, i32 1 |
111 |
| - store i32 0, ptr %tmp12, align 4 |
| 109 | + %inst2 = getelementptr inbounds %struct3, ptr %dm, i64 %idx2, i32 1 |
| 110 | + %inst12 = getelementptr inbounds %struct4, ptr %inst2, i64 0, i32 0, i32 1 |
| 111 | + store i32 0, ptr %inst12, align 4 |
112 | 112 | br label %bb3
|
113 | 113 |
|
114 | 114 | bb3:
|
115 |
| - %phi = phi ptr [ %tmp1, %bb1 ], [ %tmp2, %bb2 ] |
116 |
| - %tmp22 = invoke i32 @foo1(i32 11) to label %bb4 unwind label %bb5 |
| 115 | + %phi = phi ptr [ %inst1, %bb1 ], [ %inst2, %bb2 ] |
| 116 | + %inst22 = invoke i32 @foo1(i32 11) to label %bb4 unwind label %bb5 |
117 | 117 |
|
118 | 118 | bb4:
|
119 | 119 | ret i32 0
|
120 | 120 |
|
121 | 121 | bb5:
|
122 |
| - %tmp27 = landingpad { ptr, i32 } catch ptr @_ZTIi |
123 |
| - %tmp34 = getelementptr inbounds %struct4, ptr %phi, i64 %tmp21, i32 1 |
124 |
| - %tmp35 = getelementptr inbounds %struct2, ptr %tmp34, i64 0, i32 1 |
125 |
| - %tmp25 = load i32, ptr %tmp35, align 4 |
126 |
| - ret i32 %tmp25 |
| 122 | + %inst27 = landingpad { ptr, i32 } catch ptr @_ZTIi |
| 123 | + %inst34 = getelementptr inbounds %struct4, ptr %phi, i64 %idx3, i32 1 |
| 124 | + %inst35 = getelementptr inbounds %struct2, ptr %inst34, i64 0, i32 1 |
| 125 | + %inst25 = load i32, ptr %inst35, align 4 |
| 126 | + ret i32 %inst25 |
127 | 127 | }
|
128 | 128 |
|
129 | 129 | @_ZTIi = external constant ptr
|
|
0 commit comments