Now that instruction optzns can update the iterator as they go, we can

have objectsize folding recursively simplify away their result when it
folds.  It is important to catch this here, because otherwise we won't
eliminate the cross-block values at isel and other times.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123524 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2011-01-15 07:25:29 +00:00
parent 7579609bfe
commit 94e8e0cfbe
2 changed files with 40 additions and 10 deletions

View File

@@ -0,0 +1,24 @@
; RUN: opt -codegenprepare %s -S -o - | FileCheck %s
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-apple-darwin10.0.0"
; CHECK: @test1
define i32 @test1(i8* %ptr) nounwind ssp noredzone align 2 {
entry:
%0 = tail call i64 @llvm.objectsize.i64(i8* %ptr, i1 false)
%1 = icmp ugt i64 %0, 3
br i1 %1, label %T, label %trap
; CHECK: br i1 true, label
trap: ; preds = %0, %entry
tail call void @llvm.trap() noreturn nounwind
unreachable
T:
ret i32 4
}
declare i64 @llvm.objectsize.i64(i8*, i1) nounwind readonly
declare void @llvm.trap() nounwind