Skip to content

Commit 61512dd

Browse files
committed
[InstCombine] add tests for sdiv-of-abs; NFC
1 parent 6cd4a6f commit 61512dd

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

llvm/test/Transforms/InstCombine/sdiv-canonicalize.ll

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -instcombine -S | FileCheck %s
33

4+
declare void @use(i32)
5+
declare i32 @llvm.abs.i32(i32, i1)
6+
declare <4 x i32> @llvm.abs.v4i32(<4 x i32>, i1)
7+
48
define i32 @test_sdiv_canonicalize_op0(i32 %x, i32 %y) {
59
; CHECK-LABEL: @test_sdiv_canonicalize_op0(
610
; CHECK-NEXT: [[SDIV1:%.*]] = sdiv i32 [[X:%.*]], [[Y:%.*]]
@@ -89,3 +93,49 @@ define i64 @test_sdiv_canonicalize_constexpr(i64 %L1) {
8993
%B4 = sdiv i64 %L1, %B8
9094
ret i64 %B4
9195
}
96+
97+
define i32 @sdiv_abs_nsw(i32 %x) {
98+
; CHECK-LABEL: @sdiv_abs_nsw(
99+
; CHECK-NEXT: [[A:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)
100+
; CHECK-NEXT: [[R:%.*]] = sdiv i32 [[A]], [[X]]
101+
; CHECK-NEXT: ret i32 [[R]]
102+
;
103+
%a = call i32 @llvm.abs.i32(i32 %x, i1 true)
104+
%r = sdiv i32 %a, %x
105+
ret i32 %r
106+
}
107+
108+
define <4 x i32> @sdiv_abs_nsw_vec(<4 x i32> %x) {
109+
; CHECK-LABEL: @sdiv_abs_nsw_vec(
110+
; CHECK-NEXT: [[A:%.*]] = call <4 x i32> @llvm.abs.v4i32(<4 x i32> [[X:%.*]], i1 true)
111+
; CHECK-NEXT: [[R:%.*]] = sdiv <4 x i32> [[X]], [[A]]
112+
; CHECK-NEXT: ret <4 x i32> [[R]]
113+
;
114+
%a = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %x, i1 true)
115+
%r = sdiv <4 x i32> %x, %a
116+
ret <4 x i32> %r
117+
}
118+
119+
define i32 @sdiv_abs(i32 %x) {
120+
; CHECK-LABEL: @sdiv_abs(
121+
; CHECK-NEXT: [[A:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)
122+
; CHECK-NEXT: [[R:%.*]] = sdiv i32 [[A]], [[X]]
123+
; CHECK-NEXT: ret i32 [[R]]
124+
;
125+
%a = call i32 @llvm.abs.i32(i32 %x, i1 false)
126+
%r = sdiv i32 %a, %x
127+
ret i32 %r
128+
}
129+
130+
define i32 @sdiv_abs_extra_use(i32 %x) {
131+
; CHECK-LABEL: @sdiv_abs_extra_use(
132+
; CHECK-NEXT: [[A:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)
133+
; CHECK-NEXT: call void @use(i32 [[A]])
134+
; CHECK-NEXT: [[R:%.*]] = sdiv i32 [[A]], [[X]]
135+
; CHECK-NEXT: ret i32 [[R]]
136+
;
137+
%a = call i32 @llvm.abs.i32(i32 %x, i1 true)
138+
call void @use(i32 %a)
139+
%r = sdiv i32 %a, %x
140+
ret i32 %r
141+
}

0 commit comments

Comments
 (0)