diff options
author | Chris Lattner <sabre@nondot.org> | 2010-07-20 21:07:09 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-07-20 21:07:09 +0000 |
commit | 83252dcfe61aaebcb6bc117e71dc12968729513f (patch) | |
tree | a303b42463464aef9a146dbc5678a70d0c0bfe31 /lib/CodeGen/CodeGenFunction.h | |
parent | 021a7a63984f0f912dc9e9dae2a1b3e1509a40ce (diff) |
Follow the implementation approach suggested by PR6687,
which generates more efficient and more obviously conformant
code. We now test for overflow of the multiply then force
the result to -1 if so. On X86, this generates nice code
like this:
__Z4testl: ## @_Z4testl
## BB#0: ## %entry
subl $12, %esp
movl $4, %eax
mull 16(%esp)
testl %edx, %edx
movl $-1, %ecx
cmovel %eax, %ecx
movl %ecx, (%esp)
call __Znam
addl $12, %esp
ret
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108927 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenFunction.h')
-rw-r--r-- | lib/CodeGen/CodeGenFunction.h | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index 1a117cab96..f236eb4253 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -656,7 +656,7 @@ private: llvm::BasicBlock *TerminateLandingPad; llvm::BasicBlock *TerminateHandler; - llvm::BasicBlock *TrapBB, *ThrowLengthErrorBB; + llvm::BasicBlock *TrapBB; public: CodeGenFunction(CodeGenModule &cgm); @@ -1544,10 +1544,6 @@ public: /// generate a branch around the created basic block as necessary. llvm::BasicBlock *getTrapBB(); - /// getThrowLengthErrorBB - Create a basic block that will call - /// std::__throw_length_error to throw a std::length_error exception. - llvm::BasicBlock *getThrowLengthErrorBB(); - /// EmitCallArg - Emit a single call argument. RValue EmitCallArg(const Expr *E, QualType ArgType); |