mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-27 05:32:22 +00:00
Reassociate: cannot negate a INT_MIN value
Summary: When trying to canonicalize negative constants out of multiplication expressions, we need to check that the constant is not INT_MIN which cannot be negated. Reviewers: mcrosier Reviewed By: mcrosier Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D7286 From: Mehdi Amini <mehdi.amini@apple.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228872 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
293dfe59a5
commit
23af697ae6
@ -1991,7 +1991,7 @@ Instruction *Reassociate::canonicalizeNegConstExpr(Instruction *I) {
|
||||
Constant *C = C0 ? C0 : C1;
|
||||
unsigned ConstIdx = C0 ? 0 : 1;
|
||||
if (auto *CI = dyn_cast<ConstantInt>(C)) {
|
||||
if (!CI->isNegative())
|
||||
if (!CI->isNegative() || CI->isMinValue(true))
|
||||
return nullptr;
|
||||
} else if (auto *CF = dyn_cast<ConstantFP>(C)) {
|
||||
if (!CF->isNegative())
|
||||
|
13
test/Transforms/Reassociate/min_int.ll
Normal file
13
test/Transforms/Reassociate/min_int.ll
Normal file
@ -0,0 +1,13 @@
|
||||
; RUN: opt < %s -reassociate -dce -S | FileCheck %s
|
||||
|
||||
; MIN_INT cannot be negated during reassociation
|
||||
|
||||
define i32 @minint(i32 %i) {
|
||||
; CHECK: %mul = mul i32 %i, -2147483648
|
||||
; CHECK-NEXT: %add = add i32 %mul, 1
|
||||
; CHECK-NEXT: ret i32 %add
|
||||
%mul = mul i32 %i, -2147483648
|
||||
%add = add i32 %mul, 1
|
||||
ret i32 %add
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user