Skip to content

Commit 1139dee

Browse files
committed
[SimplifyCFG] Add more sinking tests (NFC)
1 parent 46bf5d5 commit 1139dee

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed

llvm/test/Transforms/SimplifyCFG/X86/sink-common-code.ll

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2033,6 +2033,152 @@ join:
20332033
ret void
20342034
}
20352035

2036+
define i32 @many_indirect_phis(i1 %cond, i32 %a, i32 %b) {
2037+
; CHECK-LABEL: @many_indirect_phis(
2038+
; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF:%.*]], label [[JOIN:%.*]]
2039+
; CHECK: if:
2040+
; CHECK-NEXT: call void @dummy()
2041+
; CHECK-NEXT: br label [[JOIN]]
2042+
; CHECK: join:
2043+
; CHECK-NEXT: [[B_SINK:%.*]] = phi i32 [ [[A:%.*]], [[IF]] ], [ [[B:%.*]], [[TMP0:%.*]] ]
2044+
; CHECK-NEXT: [[DOTSINK3:%.*]] = phi i32 [ 10, [[IF]] ], [ 11, [[TMP0]] ]
2045+
; CHECK-NEXT: [[DOTSINK2:%.*]] = phi i32 [ 20, [[IF]] ], [ 21, [[TMP0]] ]
2046+
; CHECK-NEXT: [[DOTSINK1:%.*]] = phi i32 [ 30, [[IF]] ], [ 31, [[TMP0]] ]
2047+
; CHECK-NEXT: [[DOTSINK:%.*]] = phi i32 [ 40, [[IF]] ], [ 41, [[TMP0]] ]
2048+
; CHECK-NEXT: [[ADD_0_B:%.*]] = add i32 [[B_SINK]], 1
2049+
; CHECK-NEXT: [[ADD_1_B:%.*]] = add i32 [[ADD_0_B]], [[DOTSINK3]]
2050+
; CHECK-NEXT: [[ADD_2_B:%.*]] = add i32 [[ADD_1_B]], [[DOTSINK2]]
2051+
; CHECK-NEXT: [[ADD_3_B:%.*]] = add i32 [[ADD_2_B]], [[DOTSINK1]]
2052+
; CHECK-NEXT: [[ADD_4_B:%.*]] = add i32 [[ADD_3_B]], [[DOTSINK]]
2053+
; CHECK-NEXT: ret i32 [[ADD_4_B]]
2054+
;
2055+
br i1 %cond, label %if, label %else
2056+
2057+
if:
2058+
call void @dummy()
2059+
%add.0.a = add i32 %a, 1
2060+
%add.1.a = add i32 %add.0.a, 10
2061+
%add.2.a = add i32 %add.1.a, 20
2062+
%add.3.a = add i32 %add.2.a, 30
2063+
%add.4.a = add i32 %add.3.a, 40
2064+
br label %join
2065+
2066+
else:
2067+
%add.0.b = add i32 %b, 1
2068+
%add.1.b = add i32 %add.0.b, 11
2069+
%add.2.b = add i32 %add.1.b, 21
2070+
%add.3.b = add i32 %add.2.b, 31
2071+
%add.4.b = add i32 %add.3.b, 41
2072+
br label %join
2073+
2074+
join:
2075+
%phi = phi i32 [ %add.4.a, %if ], [ %add.4.b, %else ]
2076+
ret i32 %phi
2077+
}
2078+
2079+
define i32 @store_and_unrelated_many_phi_add(i1 %cond, ptr %p, i32 %a, i32 %b) {
2080+
; CHECK-LABEL: @store_and_unrelated_many_phi_add(
2081+
; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
2082+
; CHECK: if:
2083+
; CHECK-NEXT: call void @dummy()
2084+
; CHECK-NEXT: [[ADD_1:%.*]] = add i32 [[A:%.*]], 2
2085+
; CHECK-NEXT: br label [[JOIN:%.*]]
2086+
; CHECK: else:
2087+
; CHECK-NEXT: [[ADD_2:%.*]] = add i32 [[B:%.*]], 3
2088+
; CHECK-NEXT: br label [[JOIN]]
2089+
; CHECK: join:
2090+
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ [[ADD_1]], [[IF]] ], [ [[ADD_2]], [[ELSE]] ]
2091+
; CHECK-NEXT: store i32 1, ptr [[P:%.*]], align 4
2092+
; CHECK-NEXT: ret i32 [[PHI]]
2093+
;
2094+
br i1 %cond, label %if, label %else
2095+
2096+
if:
2097+
call void @dummy()
2098+
%add.1 = add i32 %a, 2
2099+
store i32 1, ptr %p
2100+
br label %join
2101+
2102+
else:
2103+
%add.2 = add i32 %b, 3
2104+
store i32 1, ptr %p
2105+
br label %join
2106+
2107+
join:
2108+
%phi = phi i32 [ %add.1, %if ], [ %add.2, %else ]
2109+
ret i32 %phi
2110+
}
2111+
2112+
define i32 @store_and_related_many_phi_add(i1 %cond, ptr %p, i32 %a, i32 %b) {
2113+
; CHECK-LABEL: @store_and_related_many_phi_add(
2114+
; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
2115+
; CHECK: if:
2116+
; CHECK-NEXT: call void @dummy()
2117+
; CHECK-NEXT: [[ADD_1:%.*]] = add i32 [[A:%.*]], 2
2118+
; CHECK-NEXT: br label [[JOIN:%.*]]
2119+
; CHECK: else:
2120+
; CHECK-NEXT: [[ADD_2:%.*]] = add i32 [[B:%.*]], 3
2121+
; CHECK-NEXT: br label [[JOIN]]
2122+
; CHECK: join:
2123+
; CHECK-NEXT: [[ADD_2_SINK:%.*]] = phi i32 [ [[ADD_2]], [[ELSE]] ], [ [[ADD_1]], [[IF]] ]
2124+
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ [[ADD_1]], [[IF]] ], [ [[ADD_2]], [[ELSE]] ]
2125+
; CHECK-NEXT: store i32 [[ADD_2_SINK]], ptr [[P:%.*]], align 4
2126+
; CHECK-NEXT: ret i32 [[PHI]]
2127+
;
2128+
br i1 %cond, label %if, label %else
2129+
2130+
if:
2131+
call void @dummy()
2132+
%add.1 = add i32 %a, 2
2133+
store i32 %add.1, ptr %p
2134+
br label %join
2135+
2136+
else:
2137+
%add.2 = add i32 %b, 3
2138+
store i32 %add.2, ptr %p
2139+
br label %join
2140+
2141+
join:
2142+
%phi = phi i32 [ %add.1, %if ], [ %add.2, %else ]
2143+
ret i32 %phi
2144+
}
2145+
2146+
define i32 @store_and_unrelated_many_phi_add2(i1 %cond, ptr %p, i32 %a, i32 %b) {
2147+
; CHECK-LABEL: @store_and_unrelated_many_phi_add2(
2148+
; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF:%.*]], label [[ELSE:%.*]]
2149+
; CHECK: if:
2150+
; CHECK-NEXT: call void @dummy()
2151+
; CHECK-NEXT: [[ADD_1:%.*]] = add i32 [[A:%.*]], 2
2152+
; CHECK-NEXT: br label [[JOIN:%.*]]
2153+
; CHECK: else:
2154+
; CHECK-NEXT: [[ADD_2:%.*]] = add i32 [[B:%.*]], 3
2155+
; CHECK-NEXT: br label [[JOIN]]
2156+
; CHECK: join:
2157+
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ [[ADD_1]], [[IF]] ], [ [[ADD_2]], [[ELSE]] ]
2158+
; CHECK-NEXT: [[ADD_A_2:%.*]] = add i32 [[A]], 1
2159+
; CHECK-NEXT: store i32 [[ADD_A_2]], ptr [[P:%.*]], align 4
2160+
; CHECK-NEXT: ret i32 [[PHI]]
2161+
;
2162+
br i1 %cond, label %if, label %else
2163+
2164+
if:
2165+
call void @dummy()
2166+
%add.1 = add i32 %a, 2
2167+
%add.a.1 = add i32 %a, 1
2168+
store i32 %add.a.1, ptr %p
2169+
br label %join
2170+
2171+
else:
2172+
%add.2 = add i32 %b, 3
2173+
%add.a.2 = add i32 %a, 1
2174+
store i32 %add.a.2, ptr %p
2175+
br label %join
2176+
2177+
join:
2178+
%phi = phi i32 [ %add.1, %if ], [ %add.2, %else ]
2179+
ret i32 %phi
2180+
}
2181+
20362182
declare void @dummy()
20372183
declare void @use.ptr(ptr)
20382184

0 commit comments

Comments
 (0)