@@ -1832,9 +1832,9 @@ define i8 @shl_mask_demand(i8 %x) {
1832
1832
1833
1833
define i64 @lshr_mul_negpow2 (i64 %x ) {
1834
1834
; CHECK-LABEL: @lshr_mul_negpow2(
1835
- ; CHECK-NEXT: [[A :%.*]] = mul i64 [[X:%.*]], -4294967296
1836
- ; CHECK-NEXT: [[B :%.*]] = lshr exact i64 [[A ]], 32
1837
- ; CHECK-NEXT: ret i64 [[B ]]
1835
+ ; CHECK-NEXT: [[TMP1 :%.*]] = sub i64 0, [[X:%.*]]
1836
+ ; CHECK-NEXT: [[A :%.*]] = and i64 [[TMP1 ]], 4294967295
1837
+ ; CHECK-NEXT: ret i64 [[A ]]
1838
1838
;
1839
1839
%a = mul i64 %x , -4294967296
1840
1840
%b = lshr i64 %a , 32
@@ -1843,9 +1843,9 @@ define i64 @lshr_mul_negpow2(i64 %x) {
1843
1843
1844
1844
define i64 @lshr_mul_negpow2_2 (i64 %x ) {
1845
1845
; CHECK-LABEL: @lshr_mul_negpow2_2(
1846
- ; CHECK-NEXT: [[A :%.*]] = mul i64 [[X:%.*]], -65536
1847
- ; CHECK-NEXT: [[B :%.*]] = lshr exact i64 [[A ]], 16
1848
- ; CHECK-NEXT: ret i64 [[B ]]
1846
+ ; CHECK-NEXT: [[TMP1 :%.*]] = sub i64 0, [[X:%.*]]
1847
+ ; CHECK-NEXT: [[A :%.*]] = and i64 [[TMP1 ]], 281474976710655
1848
+ ; CHECK-NEXT: ret i64 [[A ]]
1849
1849
;
1850
1850
%a = mul i64 %x , -65536
1851
1851
%b = lshr i64 %a , 16
@@ -1854,9 +1854,9 @@ define i64 @lshr_mul_negpow2_2(i64 %x) {
1854
1854
1855
1855
define <2 x i32 > @lshr_mul_negpow2_3 (<2 x i32 > %x ) {
1856
1856
; CHECK-LABEL: @lshr_mul_negpow2_3(
1857
- ; CHECK-NEXT: [[A :%.*]] = mul <2 x i32> [[X:%.*]], <i32 -16777216, i32 -16777216>
1858
- ; CHECK-NEXT: [[B :%.*]] = lshr exact <2 x i32> [[A ]], <i32 24 , i32 24 >
1859
- ; CHECK-NEXT: ret <2 x i32> [[B ]]
1857
+ ; CHECK-NEXT: [[TMP1 :%.*]] = sub <2 x i32> zeroinitializer, [[X:%.*]]
1858
+ ; CHECK-NEXT: [[A :%.*]] = and <2 x i32> [[TMP1 ]], <i32 255 , i32 255 >
1859
+ ; CHECK-NEXT: ret <2 x i32> [[A ]]
1860
1860
;
1861
1861
%a = mul <2 x i32 > %x , <i32 -16777216 , i32 -16777216 >
1862
1862
%b = lshr <2 x i32 > %a , <i32 24 , i32 24 >
@@ -1865,10 +1865,10 @@ define <2 x i32> @lshr_mul_negpow2_3(<2 x i32> %x) {
1865
1865
1866
1866
define i32 @lshr_mul_negpow2_4 (i32 %x ) {
1867
1867
; CHECK-LABEL: @lshr_mul_negpow2_4(
1868
- ; CHECK-NEXT: [[A :%.*]] = mul i32 [[X:%.*]], -65536
1869
- ; CHECK-NEXT: [[B :%.*]] = lshr exact i32 [[A ]], 16
1870
- ; CHECK-NEXT: [[C :%.*]] = xor i32 [[B ]], 1
1871
- ; CHECK-NEXT: ret i32 [[C ]]
1868
+ ; CHECK-NEXT: [[TMP1 :%.*]] = sub i32 0, [[X:%.*]]
1869
+ ; CHECK-NEXT: [[A :%.*]] = and i32 [[TMP1 ]], 65535
1870
+ ; CHECK-NEXT: [[B :%.*]] = xor i32 [[A ]], 1
1871
+ ; CHECK-NEXT: ret i32 [[B ]]
1872
1872
;
1873
1873
%a = mul i32 %x , -65536
1874
1874
%b = xor i32 %a , 65536
@@ -1878,10 +1878,10 @@ define i32 @lshr_mul_negpow2_4(i32 %x) {
1878
1878
1879
1879
define <2 x i32 > @lshr_mul_negpow2_5 (<2 x i32 > %x ) {
1880
1880
; CHECK-LABEL: @lshr_mul_negpow2_5(
1881
- ; CHECK-NEXT: [[A :%.*]] = mul <2 x i32> [[X:%.*]], <i32 -65536, i32 -65536>
1882
- ; CHECK-NEXT: [[B :%.*]] = lshr exact <2 x i32> [[A ]], <i32 16 , i32 16 >
1883
- ; CHECK-NEXT: [[C :%.*]] = or <2 x i32> [[B ]], <i32 8, i32 8>
1884
- ; CHECK-NEXT: ret <2 x i32> [[C ]]
1881
+ ; CHECK-NEXT: [[TMP1 :%.*]] = sub <2 x i32> zeroinitializer, [[X:%.*]]
1882
+ ; CHECK-NEXT: [[A :%.*]] = and <2 x i32> [[TMP1 ]], <i32 65527 , i32 65527 >
1883
+ ; CHECK-NEXT: [[B :%.*]] = or <2 x i32> [[A ]], <i32 8, i32 8>
1884
+ ; CHECK-NEXT: ret <2 x i32> [[B ]]
1885
1885
;
1886
1886
%a = mul <2 x i32 > %x , <i32 -65536 , i32 -65536 >
1887
1887
%b = or <2 x i32 > %a , <i32 524288 , i32 524288 >
0 commit comments