@@ -7,8 +7,9 @@ define i1 @test_ult_trunc_add(i64 %x) {
77; X64-LABEL: test_ult_trunc_add:
88; X64: # %bb.0:
99; X64-NEXT: shrq $48, %rdi
10- ; X64-NEXT: addl $-65522, %edi # imm = 0xFFFF000E
11- ; X64-NEXT: cmpl $3, %edi
10+ ; X64-NEXT: addl $14, %edi
11+ ; X64-NEXT: movzwl %di, %eax
12+ ; X64-NEXT: cmpl $3, %eax
1213; X64-NEXT: setb %al
1314; X64-NEXT: retq
1415 %add = add i64 %x, 3940649673949184
@@ -22,8 +23,9 @@ define i1 @test_ult_add(i64 %x) {
2223; X64-LABEL: test_ult_add:
2324; X64: # %bb.0:
2425; X64-NEXT: shrq $48, %rdi
25- ; X64-NEXT: addl $-65522, %edi # imm = 0xFFFF000E
26- ; X64-NEXT: cmpl $3, %edi
26+ ; X64-NEXT: addl $14, %edi
27+ ; X64-NEXT: movzwl %di, %eax
28+ ; X64-NEXT: cmpl $3, %eax
2729; X64-NEXT: setb %al
2830; X64-NEXT: retq
2931 %add = add i64 3940649673949184, %x
@@ -35,8 +37,9 @@ define i1 @test_ugt_trunc_add(i64 %x) {
3537; X64-LABEL: test_ugt_trunc_add:
3638; X64: # %bb.0:
3739; X64-NEXT: shrq $48, %rdi
38- ; X64-NEXT: addl $-65522, %edi # imm = 0xFFFF000E
39- ; X64-NEXT: cmpl $4, %edi
40+ ; X64-NEXT: addl $14, %edi
41+ ; X64-NEXT: movzwl %di, %eax
42+ ; X64-NEXT: cmpl $4, %eax
4043; X64-NEXT: setae %al
4144; X64-NEXT: retq
4245 %add = add i64 %x, 3940649673949184
@@ -116,7 +119,8 @@ define i32 @test_trunc_add(i64 %x) {
116119; X64-LABEL: test_trunc_add:
117120; X64: # %bb.0:
118121; X64-NEXT: shrq $48, %rdi
119- ; X64-NEXT: leal -65522(%rdi), %eax
122+ ; X64-NEXT: addl $14, %edi
123+ ; X64-NEXT: movzwl %di, %eax
120124; X64-NEXT: retq
121125 %add = add i64 %x, 3940649673949184
122126 %shr = lshr i64 %add, 48
@@ -151,3 +155,20 @@ for.body:
151155exit:
152156 ret i32 0
153157}
158+
159+ define i64 @pr128309(i64 %x) {
160+ ; X64-LABEL: pr128309:
161+ ; X64: # %bb.0: # %entry
162+ ; X64-NEXT: movl %edi, %eax
163+ ; X64-NEXT: andl $18114, %eax # imm = 0x46C2
164+ ; X64-NEXT: addl $6, %eax
165+ ; X64-NEXT: andl %edi, %eax
166+ ; X64-NEXT: retq
167+ entry:
168+ %shl = shl i64 %x, 48
169+ %and = and i64 %shl, 5098637728136822784
170+ %add = add i64 %and, 1688849860263936
171+ %lshr = lshr i64 %add, 48
172+ %res = and i64 %lshr, %x
173+ ret i64 %res
174+ }
0 commit comments