Skip to content

Commit a64ac3f

Browse files
committed
[DAGCombiner] Add pre-commit tests. NFC.
1 parent fbd89bc commit a64ac3f

File tree

3 files changed

+208
-0
lines changed

3 files changed

+208
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=aarch64-- | FileCheck %s
3+
4+
define zeroext i32 @trunc_nuw_nsw_urem(i64 %x) nounwind {
5+
; CHECK-LABEL: trunc_nuw_nsw_urem:
6+
; CHECK: // %bb.0: // %entry
7+
; CHECK-NEXT: mov w8, #5977 // =0x1759
8+
; CHECK-NEXT: mov w9, w0
9+
; CHECK-NEXT: movk w8, #53687, lsl #16
10+
; CHECK-NEXT: umull x8, w9, w8
11+
; CHECK-NEXT: mov w9, #10000 // =0x2710
12+
; CHECK-NEXT: lsr x8, x8, #45
13+
; CHECK-NEXT: msub w0, w8, w9, w0
14+
; CHECK-NEXT: ret
15+
entry:
16+
%trunc = trunc nuw nsw i64 %x to i32
17+
%rem = urem i32 %trunc, 10000
18+
ret i32 %rem
19+
}
20+
21+
define i64 @zext_nneg_udiv_trunc_nuw(i64 %x) nounwind {
22+
; CHECK-LABEL: zext_nneg_udiv_trunc_nuw:
23+
; CHECK: // %bb.0: // %entry
24+
; CHECK-NEXT: mov w8, #52429 // =0xcccd
25+
; CHECK-NEXT: and w9, w0, #0xffff
26+
; CHECK-NEXT: mul w8, w9, w8
27+
; CHECK-NEXT: lsr w0, w8, #23
28+
; CHECK-NEXT: ret
29+
entry:
30+
%trunc = trunc nuw i64 %x to i16
31+
%div = udiv i16 %trunc, 160
32+
%ext = zext nneg i16 %div to i64
33+
ret i64 %ext
34+
}
35+
36+
define i64 @sext_udiv_trunc_nuw(i64 %x) nounwind {
37+
; CHECK-LABEL: sext_udiv_trunc_nuw:
38+
; CHECK: // %bb.0: // %entry
39+
; CHECK-NEXT: mov w8, #52429 // =0xcccd
40+
; CHECK-NEXT: and w9, w0, #0xffff
41+
; CHECK-NEXT: mul w8, w9, w8
42+
; CHECK-NEXT: lsr w0, w8, #23
43+
; CHECK-NEXT: ret
44+
entry:
45+
%trunc = trunc nuw i64 %x to i16
46+
%div = udiv i16 %trunc, 160
47+
%ext = sext i16 %div to i64
48+
ret i64 %ext
49+
}
50+
51+
define ptr @gep_nusw_zext_nneg_add_trunc_nuw_nsw(ptr %p, i64 %x) nounwind {
52+
; CHECK-LABEL: gep_nusw_zext_nneg_add_trunc_nuw_nsw:
53+
; CHECK: // %bb.0: // %entry
54+
; CHECK-NEXT: add w8, w1, #5
55+
; CHECK-NEXT: add x0, x0, w8, uxtw #2
56+
; CHECK-NEXT: ret
57+
entry:
58+
%trunc = trunc nuw nsw i64 %x to i32
59+
%add = add nuw nsw i32 %trunc, 5
60+
%offset = zext nneg i32 %add to i64
61+
%gep = getelementptr nusw float, ptr %p, i64 %offset
62+
ret ptr %gep
63+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=riscv64 -mattr=+m | FileCheck %s
3+
4+
define signext i8 @trunc_nsw_add(i32 signext %x) nounwind {
5+
; CHECK-LABEL: trunc_nsw_add:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: addi a0, a0, 1
8+
; CHECK-NEXT: slli a0, a0, 56
9+
; CHECK-NEXT: srai a0, a0, 56
10+
; CHECK-NEXT: ret
11+
entry:
12+
%add = add nsw i32 %x, 1
13+
%trunc = trunc nsw i32 %add to i8
14+
ret i8 %trunc
15+
}
16+
17+
define signext i32 @trunc_nuw_nsw_urem(i64 %x) nounwind {
18+
; CHECK-LABEL: trunc_nuw_nsw_urem:
19+
; CHECK: # %bb.0: # %entry
20+
; CHECK-NEXT: slli a1, a0, 32
21+
; CHECK-NEXT: lui a2, 858993
22+
; CHECK-NEXT: addi a2, a2, 1881
23+
; CHECK-NEXT: slli a2, a2, 32
24+
; CHECK-NEXT: mulhu a1, a1, a2
25+
; CHECK-NEXT: srli a1, a1, 45
26+
; CHECK-NEXT: lui a2, 2
27+
; CHECK-NEXT: addi a2, a2, 1808
28+
; CHECK-NEXT: mul a1, a1, a2
29+
; CHECK-NEXT: subw a0, a0, a1
30+
; CHECK-NEXT: ret
31+
entry:
32+
%trunc = trunc nuw nsw i64 %x to i32
33+
%rem = urem i32 %trunc, 10000
34+
ret i32 %rem
35+
}
36+
37+
define i64 @zext_nneg_udiv_trunc_nuw(i64 %x) nounwind {
38+
; CHECK-LABEL: zext_nneg_udiv_trunc_nuw:
39+
; CHECK: # %bb.0: # %entry
40+
; CHECK-NEXT: lui a1, 52429
41+
; CHECK-NEXT: slli a1, a1, 4
42+
; CHECK-NEXT: slli a0, a0, 48
43+
; CHECK-NEXT: mulhu a0, a0, a1
44+
; CHECK-NEXT: srli a0, a0, 23
45+
; CHECK-NEXT: ret
46+
entry:
47+
%trunc = trunc nuw i64 %x to i16
48+
%div = udiv i16 %trunc, 160
49+
%ext = zext nneg i16 %div to i64
50+
ret i64 %ext
51+
}
52+
53+
define i64 @sext_udiv_trunc_nuw(i64 %x) nounwind {
54+
; CHECK-LABEL: sext_udiv_trunc_nuw:
55+
; CHECK: # %bb.0: # %entry
56+
; CHECK-NEXT: lui a1, 52429
57+
; CHECK-NEXT: slli a1, a1, 4
58+
; CHECK-NEXT: slli a0, a0, 48
59+
; CHECK-NEXT: mulhu a0, a0, a1
60+
; CHECK-NEXT: srli a0, a0, 23
61+
; CHECK-NEXT: ret
62+
entry:
63+
%trunc = trunc nuw i64 %x to i16
64+
%div = udiv i16 %trunc, 160
65+
%ext = sext i16 %div to i64
66+
ret i64 %ext
67+
}
68+
69+
define ptr @gep_nusw_zext_nneg_add_trunc_nuw_nsw(ptr %p, i64 %x) nounwind {
70+
; CHECK-LABEL: gep_nusw_zext_nneg_add_trunc_nuw_nsw:
71+
; CHECK: # %bb.0: # %entry
72+
; CHECK-NEXT: sext.w a1, a1
73+
; CHECK-NEXT: slli a1, a1, 2
74+
; CHECK-NEXT: add a0, a1, a0
75+
; CHECK-NEXT: addi a0, a0, 20
76+
; CHECK-NEXT: ret
77+
entry:
78+
%trunc = trunc nuw nsw i64 %x to i32
79+
%add = add nuw nsw i32 %trunc, 5
80+
%offset = zext nneg i32 %add to i64
81+
%gep = getelementptr nusw float, ptr %p, i64 %offset
82+
ret ptr %gep
83+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=x86_64 | FileCheck %s
3+
4+
define zeroext i32 @trunc_nuw_nsw_urem(i64 %x) nounwind {
5+
; CHECK-LABEL: trunc_nuw_nsw_urem:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: movq %rdi, %rax
8+
; CHECK-NEXT: movl %eax, %ecx
9+
; CHECK-NEXT: movl $3518437209, %edx # imm = 0xD1B71759
10+
; CHECK-NEXT: imulq %rcx, %rdx
11+
; CHECK-NEXT: shrq $45, %rdx
12+
; CHECK-NEXT: imull $10000, %edx, %ecx # imm = 0x2710
13+
; CHECK-NEXT: subl %ecx, %eax
14+
; CHECK-NEXT: # kill: def $eax killed $eax killed $rax
15+
; CHECK-NEXT: retq
16+
entry:
17+
%trunc = trunc nuw nsw i64 %x to i32
18+
%rem = urem i32 %trunc, 10000
19+
ret i32 %rem
20+
}
21+
22+
define i64 @zext_nneg_udiv_trunc_nuw(i64 %x) nounwind {
23+
; CHECK-LABEL: zext_nneg_udiv_trunc_nuw:
24+
; CHECK: # %bb.0: # %entry
25+
; CHECK-NEXT: movzwl %di, %eax
26+
; CHECK-NEXT: imull $52429, %eax, %eax # imm = 0xCCCD
27+
; CHECK-NEXT: shrl $23, %eax
28+
; CHECK-NEXT: retq
29+
entry:
30+
%trunc = trunc nuw i64 %x to i16
31+
%div = udiv i16 %trunc, 160
32+
%ext = zext nneg i16 %div to i64
33+
ret i64 %ext
34+
}
35+
36+
define i64 @sext_udiv_trunc_nuw(i64 %x) nounwind {
37+
; CHECK-LABEL: sext_udiv_trunc_nuw:
38+
; CHECK: # %bb.0: # %entry
39+
; CHECK-NEXT: movzwl %di, %eax
40+
; CHECK-NEXT: imull $52429, %eax, %eax # imm = 0xCCCD
41+
; CHECK-NEXT: shrl $23, %eax
42+
; CHECK-NEXT: retq
43+
entry:
44+
%trunc = trunc nuw i64 %x to i16
45+
%div = udiv i16 %trunc, 160
46+
%ext = sext i16 %div to i64
47+
ret i64 %ext
48+
}
49+
50+
define ptr @gep_nusw_zext_nneg_add_trunc_nuw_nsw(ptr %p, i64 %x) nounwind {
51+
; CHECK-LABEL: gep_nusw_zext_nneg_add_trunc_nuw_nsw:
52+
; CHECK: # %bb.0: # %entry
53+
; CHECK-NEXT: movl %esi, %eax
54+
; CHECK-NEXT: leaq 20(%rdi,%rax,4), %rax
55+
; CHECK-NEXT: retq
56+
entry:
57+
%trunc = trunc nuw nsw i64 %x to i32
58+
%add = add nuw nsw i32 %trunc, 5
59+
%offset = zext nneg i32 %add to i64
60+
%gep = getelementptr nusw float, ptr %p, i64 %offset
61+
ret ptr %gep
62+
}

0 commit comments

Comments
 (0)