Skip to content

Commit 3aff787

Browse files
committed
[InstCombine] Pre-commit test for D130103.
1 parent 19d4f5e commit 3aff787

File tree

1 file changed

+72
-0
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+72
-0
lines changed

llvm/test/Transforms/InstCombine/shift.ll

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,3 +1829,75 @@ define i8 @shl_mask_demand(i8 %x) {
18291829
%r = and i8 %s, 7 ; 0b00000111
18301830
ret i8 %r
18311831
}
1832+
1833+
define i64 @lshr_mul_negpow2(i64 %x) {
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]]
1838+
;
1839+
%a = mul i64 %x, -4294967296
1840+
%b = lshr i64 %a, 32
1841+
ret i64 %b
1842+
}
1843+
1844+
define i64 @lshr_mul_negpow2_2(i64 %x) {
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]]
1849+
;
1850+
%a = mul i64 %x, -65536
1851+
%b = lshr i64 %a, 16
1852+
ret i64 %b
1853+
}
1854+
1855+
define <2 x i32> @lshr_mul_negpow2_3(<2 x i32> %x) {
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]]
1860+
;
1861+
%a = mul <2 x i32> %x, <i32 -16777216, i32 -16777216>
1862+
%b = lshr <2 x i32> %a, <i32 24, i32 24>
1863+
ret <2 x i32> %b
1864+
}
1865+
1866+
define i32 @lshr_mul_negpow2_4(i32 %x) {
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]]
1872+
;
1873+
%a = mul i32 %x, -65536
1874+
%b = xor i32 %a, 65536
1875+
%c = lshr i32 %b, 16
1876+
ret i32 %c
1877+
}
1878+
1879+
define <2 x i32> @lshr_mul_negpow2_5(<2 x i32> %x) {
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]]
1885+
;
1886+
%a = mul <2 x i32> %x, <i32 -65536, i32 -65536>
1887+
%b = or <2 x i32> %a, <i32 524288, i32 524288>
1888+
%c = lshr <2 x i32> %b, <i32 16, i32 16>
1889+
ret <2 x i32> %c
1890+
}
1891+
1892+
define i64 @lshr_mul_negpow2_extra_use(i64 %x) {
1893+
; CHECK-LABEL: @lshr_mul_negpow2_extra_use(
1894+
; CHECK-NEXT: [[A:%.*]] = mul i64 [[X:%.*]], -4294967296
1895+
; CHECK-NEXT: [[B:%.*]] = lshr exact i64 [[A]], 32
1896+
; CHECK-NEXT: call void @use(i64 [[A]])
1897+
; CHECK-NEXT: ret i64 [[B]]
1898+
;
1899+
%a = mul i64 %x, -4294967296
1900+
%b = lshr i64 %a, 32
1901+
call void @use(i64 %a)
1902+
ret i64 %b
1903+
}

0 commit comments

Comments
 (0)