@@ -1704,19 +1704,14 @@ return:
1704
1704
1705
1705
define ptr @multi_use_in_phi (i1 %cond , ptr %p , i64 %a , i64 %b ) {
1706
1706
; CHECK-LABEL: @multi_use_in_phi(
1707
- ; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF:%.*]], label [[ELSE :%.*]]
1707
+ ; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF:%.*]], label [[JOIN :%.*]]
1708
1708
; CHECK: if:
1709
1709
; CHECK-NEXT: call void @dummy()
1710
- ; CHECK-NEXT: [[GEP1_A:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 [[A:%.*]]
1711
- ; CHECK-NEXT: br label [[JOIN:%.*]]
1712
- ; CHECK: else:
1713
- ; CHECK-NEXT: [[GEP1_B:%.*]] = getelementptr i8, ptr [[P]], i64 [[A]]
1714
1710
; CHECK-NEXT: br label [[JOIN]]
1715
1711
; CHECK: join:
1716
- ; CHECK-NEXT: [[GEP1_B_SINK:%.*]] = phi ptr [ [[GEP1_B]], [[ELSE]] ], [ [[GEP1_A]], [[IF]] ]
1717
- ; CHECK-NEXT: [[PHI1:%.*]] = phi ptr [ [[GEP1_A]], [[IF]] ], [ [[GEP1_B]], [[ELSE]] ]
1718
- ; CHECK-NEXT: [[GEP2_B:%.*]] = getelementptr i8, ptr [[GEP1_B_SINK]], i64 [[B:%.*]]
1719
- ; CHECK-NEXT: call void @use.ptr(ptr [[PHI1]])
1712
+ ; CHECK-NEXT: [[GEP1_B:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 [[A:%.*]]
1713
+ ; CHECK-NEXT: [[GEP2_B:%.*]] = getelementptr i8, ptr [[GEP1_B]], i64 [[B:%.*]]
1714
+ ; CHECK-NEXT: call void @use.ptr(ptr [[GEP1_B]])
1720
1715
; CHECK-NEXT: ret ptr [[GEP2_B]]
1721
1716
;
1722
1717
br i1 %cond , label %if , label %else
@@ -1778,23 +1773,16 @@ join:
1778
1773
1779
1774
define i64 @multi_use_in_block (i1 %cond , ptr %p , i64 %a , i64 %b ) {
1780
1775
; CHECK-LABEL: @multi_use_in_block(
1781
- ; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF:%.*]], label [[ELSE :%.*]]
1776
+ ; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF:%.*]], label [[JOIN :%.*]]
1782
1777
; CHECK: if:
1783
1778
; CHECK-NEXT: call void @dummy()
1784
- ; CHECK-NEXT: [[GEP1_A:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 [[A:%.*]]
1785
- ; CHECK-NEXT: [[V_A:%.*]] = load i64, ptr [[GEP1_A]], align 8
1786
- ; CHECK-NEXT: [[GEP2_A:%.*]] = getelementptr i8, ptr [[GEP1_A]], i64 [[V_A]]
1787
- ; CHECK-NEXT: br label [[JOIN:%.*]]
1788
- ; CHECK: else:
1789
- ; CHECK-NEXT: [[GEP1_B:%.*]] = getelementptr i8, ptr [[P]], i64 [[A]]
1790
- ; CHECK-NEXT: [[V_B:%.*]] = load i64, ptr [[GEP1_B]], align 8
1791
- ; CHECK-NEXT: [[GEP2_B:%.*]] = getelementptr i8, ptr [[GEP1_B]], i64 [[V_B]]
1792
1779
; CHECK-NEXT: br label [[JOIN]]
1793
1780
; CHECK: join:
1794
- ; CHECK-NEXT: [[PHI1:%.*]] = phi i64 [ [[V_A]], [[IF]] ], [ [[V_B]], [[ELSE]] ]
1795
- ; CHECK-NEXT: [[PHI2:%.*]] = phi ptr [ [[GEP2_A]], [[IF]] ], [ [[GEP2_B]], [[ELSE]] ]
1796
- ; CHECK-NEXT: call void @use.ptr(ptr [[PHI2]])
1797
- ; CHECK-NEXT: ret i64 [[PHI1]]
1781
+ ; CHECK-NEXT: [[GEP1_B:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 [[A:%.*]]
1782
+ ; CHECK-NEXT: [[V_B:%.*]] = load i64, ptr [[GEP1_B]], align 8
1783
+ ; CHECK-NEXT: [[GEP2_B:%.*]] = getelementptr i8, ptr [[GEP1_B]], i64 [[V_B]]
1784
+ ; CHECK-NEXT: call void @use.ptr(ptr [[GEP2_B]])
1785
+ ; CHECK-NEXT: ret i64 [[V_B]]
1798
1786
;
1799
1787
br i1 %cond , label %if , label %else
1800
1788
@@ -1824,19 +1812,17 @@ define i64 @multi_use_in_block_inconsistent(i1 %cond, ptr %p, i64 %a, i64 %b) {
1824
1812
; CHECK: if:
1825
1813
; CHECK-NEXT: call void @dummy()
1826
1814
; CHECK-NEXT: [[GEP1_A:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 [[A:%.*]]
1827
- ; CHECK-NEXT: [[V_A:%.*]] = load i64, ptr [[GEP1_A]], align 8
1828
- ; CHECK-NEXT: [[GEP2_A:%.*]] = getelementptr i8, ptr [[GEP1_A]], i64 [[V_A]]
1829
1815
; CHECK-NEXT: br label [[JOIN:%.*]]
1830
1816
; CHECK: else:
1831
1817
; CHECK-NEXT: [[GEP1_B:%.*]] = getelementptr i8, ptr [[P]], i64 [[A]]
1832
- ; CHECK-NEXT: [[V_B:%.*]] = load i64, ptr [[P]], align 8
1833
- ; CHECK-NEXT: [[GEP2_B:%.*]] = getelementptr i8, ptr [[GEP1_B]], i64 [[V_B]]
1834
1818
; CHECK-NEXT: br label [[JOIN]]
1835
1819
; CHECK: join:
1836
- ; CHECK-NEXT: [[PHI1:%.*]] = phi i64 [ [[V_A]], [[IF]] ], [ [[V_B]], [[ELSE]] ]
1837
- ; CHECK-NEXT: [[PHI2:%.*]] = phi ptr [ [[GEP2_A]], [[IF]] ], [ [[GEP2_B]], [[ELSE]] ]
1838
- ; CHECK-NEXT: call void @use.ptr(ptr [[PHI2]])
1839
- ; CHECK-NEXT: ret i64 [[PHI1]]
1820
+ ; CHECK-NEXT: [[P_SINK:%.*]] = phi ptr [ [[P]], [[ELSE]] ], [ [[GEP1_A]], [[IF]] ]
1821
+ ; CHECK-NEXT: [[GEP1_B_SINK:%.*]] = phi ptr [ [[GEP1_B]], [[ELSE]] ], [ [[GEP1_A]], [[IF]] ]
1822
+ ; CHECK-NEXT: [[V_B:%.*]] = load i64, ptr [[P_SINK]], align 8
1823
+ ; CHECK-NEXT: [[GEP2_B:%.*]] = getelementptr i8, ptr [[GEP1_B_SINK]], i64 [[V_B]]
1824
+ ; CHECK-NEXT: call void @use.ptr(ptr [[GEP2_B]])
1825
+ ; CHECK-NEXT: ret i64 [[V_B]]
1840
1826
;
1841
1827
br i1 %cond , label %if , label %else
1842
1828
0 commit comments