diff options
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/imul.ll | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/llvm/test/CodeGen/X86/imul.ll b/llvm/test/CodeGen/X86/imul.ll index 14f15143b95..0f1a824f00f 100644 --- a/llvm/test/CodeGen/X86/imul.ll +++ b/llvm/test/CodeGen/X86/imul.ll @@ -499,8 +499,9 @@ entry: define i64 @testOverflow(i64 %a) { ; X64-LABEL: testOverflow: ; X64: # %bb.0: # %entry -; X64-NEXT: movabsq $9223372036854775807, %rax # imm = 0x7FFFFFFFFFFFFFFF -; X64-NEXT: imulq %rdi, %rax +; X64-NEXT: movq %rdi, %rax +; X64-NEXT: shlq $63, %rax +; X64-NEXT: subq %rdi, %rax ; X64-NEXT: retq ; ; X86-LABEL: testOverflow: @@ -524,3 +525,27 @@ entry: %tmp3 = mul i64 %a, 9223372036854775807 ret i64 %tmp3 } + +define i64 @testNegOverflow(i64 %a) { +; X64-LABEL: testNegOverflow: +; X64: # %bb.0: # %entry +; X64-NEXT: movq %rdi, %rax +; X64-NEXT: shlq $63, %rax +; X64-NEXT: subq %rax, %rdi +; X64-NEXT: movq %rdi, %rax +; X64-NEXT: retq +; +; X86-LABEL: testNegOverflow: +; X86: # %bb.0: # %entry +; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; X86-NEXT: movl $1, %edx +; X86-NEXT: movl %ecx, %eax +; X86-NEXT: mull %edx +; X86-NEXT: shll $31, %ecx +; X86-NEXT: addl %ecx, %edx +; X86-NEXT: addl {{[0-9]+}}(%esp), %edx +; X86-NEXT: retl +entry: + %tmp3 = mul i64 %a, -9223372036854775807 + ret i64 %tmp3 +} |

