diff options
author | Mike Stump <mrs@apple.com> | 2009-04-02 18:15:54 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-04-02 18:15:54 +0000 |
commit | 035cf8911c2282550411be70f370dfe5d282b5c9 (patch) | |
tree | 55831c55c26cbe15951d8a4e41e6726cd18073ad /lib/CodeGen/CGExprScalar.cpp | |
parent | 08ae3de4c90a9c4b79fedf878760144df6758ecc (diff) |
Remove -ftrapu.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68330 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGExprScalar.cpp')
-rw-r--r-- | lib/CodeGen/CGExprScalar.cpp | 85 |
1 files changed, 28 insertions, 57 deletions
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 1d2da0ddf8..225b70882e 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -262,9 +262,8 @@ public: // Binary Operators. Value *EmitMul(const BinOpInfo &Ops) { - if (CGF.getContext().getLangOptions().UnsignedOverflowChecking - || (CGF.getContext().getLangOptions().OverflowChecking - && Ops.Ty->isSignedIntegerType())) + if (CGF.getContext().getLangOptions().OverflowChecking + && Ops.Ty->isSignedIntegerType()) return EmitOverflowCheckedBinOp(Ops); return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul"); } @@ -837,54 +836,28 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { unsigned IID; unsigned OpID = 0; - if (Ops.Ty->isSignedIntegerType()) { - switch (Ops.E->getOpcode()) { - case BinaryOperator::Add: - case BinaryOperator::AddAssign: - OpID = 1; - IID = llvm::Intrinsic::sadd_with_overflow; - break; - case BinaryOperator::Sub: - case BinaryOperator::SubAssign: - OpID = 2; - IID = llvm::Intrinsic::ssub_with_overflow; - break; - case BinaryOperator::Mul: - case BinaryOperator::MulAssign: - OpID = 3; - IID = llvm::Intrinsic::smul_with_overflow; - break; - default: - fprintf(stderr, "Opcode: %d\n", Ops.E->getOpcode()); - assert(false && "Unsupported operation for overflow detection"); - } - OpID <<= 1; - OpID |= 1; - } - else { - assert(Ops.Ty->isUnsignedIntegerType() && - "Must be either a signed or unsigned integer op"); - switch (Ops.E->getOpcode()) { - case BinaryOperator::Add: - case BinaryOperator::AddAssign: - OpID = 1; - IID = llvm::Intrinsic::uadd_with_overflow; - break; - case BinaryOperator::Sub: - case BinaryOperator::SubAssign: - OpID = 2; - IID = llvm::Intrinsic::usub_with_overflow; - break; - case BinaryOperator::Mul: - case BinaryOperator::MulAssign: - OpID = 3; - IID = llvm::Intrinsic::umul_with_overflow; - break; - default: - assert(false && "Unsupported operation for overflow detection"); - } - OpID <<= 1; - } + switch (Ops.E->getOpcode()) { + case BinaryOperator::Add: + case BinaryOperator::AddAssign: + OpID = 1; + IID = llvm::Intrinsic::sadd_with_overflow; + break; + case BinaryOperator::Sub: + case BinaryOperator::SubAssign: + OpID = 2; + IID = llvm::Intrinsic::ssub_with_overflow; + break; + case BinaryOperator::Mul: + case BinaryOperator::MulAssign: + OpID = 3; + IID = llvm::Intrinsic::smul_with_overflow; + break; + default: + assert(false && "Unsupported operation for overflow detection"); + } + OpID <<= 1; + OpID |= 1; + const llvm::Type *opTy = CGF.CGM.getTypes().ConvertType(Ops.Ty); llvm::Function *intrinsic = CGF.CGM.getIntrinsic(IID, &opTy, 1); @@ -945,9 +918,8 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &Ops) { if (!Ops.Ty->isPointerType()) { - if (CGF.getContext().getLangOptions().UnsignedOverflowChecking - || (CGF.getContext().getLangOptions().OverflowChecking - && Ops.Ty->isSignedIntegerType())) + if (CGF.getContext().getLangOptions().OverflowChecking + && Ops.Ty->isSignedIntegerType()) return EmitOverflowCheckedBinOp(Ops); return Builder.CreateAdd(Ops.LHS, Ops.RHS, "add"); } @@ -998,9 +970,8 @@ Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &Ops) { Value *ScalarExprEmitter::EmitSub(const BinOpInfo &Ops) { if (!isa<llvm::PointerType>(Ops.LHS->getType())) { - if (CGF.getContext().getLangOptions().UnsignedOverflowChecking - || (CGF.getContext().getLangOptions().OverflowChecking - && Ops.Ty->isSignedIntegerType())) + if (CGF.getContext().getLangOptions().OverflowChecking + && Ops.Ty->isSignedIntegerType()) return EmitOverflowCheckedBinOp(Ops); return Builder.CreateSub(Ops.LHS, Ops.RHS, "sub"); } |