Revert the addition of hasNoPointerOverflow to GEPOperator.

Getelementptrs that are defined to wrap are virtually useless to
optimization, and getelementptrs that are undefined on any kind
of overflow are too restrictive -- it's difficult to ensure that
all intermediate addresses are within bounds. I'm going to take
a different approach.

Remove a few optimizations that depended on this flag.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76437 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman
2009-07-20 17:43:30 +00:00
parent 8f4e22ff9a
commit f241174421
12 changed files with 43 additions and 266 deletions

View File

@@ -0,0 +1,21 @@
; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep inttoptr | count 2
;; Target triple for gep raising case below.
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
target triple = "i686-apple-darwin8"
; PR1795
define void @test2(i32 %.val24) {
EntryBlock:
add i32 %.val24, -12
inttoptr i32 %0 to i32*
store i32 1, i32* %1
add i32 %.val24, -16
inttoptr i32 %2 to i32*
getelementptr i32* %3, i32 1
load i32* %4
tail call i32 @callee( i32 %5 )
ret void
}
declare i32 @callee(i32)