| ; RUN: opt %loadPolly -polly-codegen < %s |
| ; |
| ; Check we do not crash even though the dead %tmp8 is referenced by a parameter |
| ; and we do not pre-load it (as it is dead). |
| ; |
| target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" |
| |
| %struct.hoge = type { %struct.widget*, i32, i32, i32, %struct.hoge*, %struct.hoge*, %struct.barney, %struct.ham, %struct.wombat } |
| %struct.widget = type { i32, i32, i32, i32, %struct.quux* } |
| %struct.quux = type { i8*, i32, i32, i32, %struct.hoge.0 } |
| %struct.hoge.0 = type { [2 x i64] } |
| %struct.barney = type { %struct.hoge* } |
| %struct.ham = type { i32 } |
| %struct.wombat = type { %struct.hoge** } |
| %struct.foo = type { %struct.wibble*, %struct.wibble*, i32, i32, i32, %struct.hoge.2, %struct.blam, %struct.wombat.5, i16, i8*, i8*, i16, i8*, i16, i16*, i16, %struct.blam.6**, i16, %struct.foo.7**, i8*, i16, i8**, i8* } |
| %struct.wibble = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct.foo.1*, %struct.wibble*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] } |
| %struct.foo.1 = type { %struct.foo.1*, %struct.wibble*, i32 } |
| %struct.hoge.2 = type { i16, i16 } |
| %struct.blam = type { i16, %struct.barney.3* } |
| %struct.barney.3 = type { i8, %struct.foo.4 } |
| %struct.foo.4 = type { i64 } |
| %struct.wombat.5 = type { i16 } |
| %struct.blam.6 = type <{ %struct.wombat.5, [6 x i8], i8*, i8*, i32, i16, [2 x i8] }> |
| %struct.foo.7 = type { %struct.wombat.5, i8*, i8*, i8, i8, i32, i8*, i16, %struct.bar*, i16, %struct.barney.9*, i16, %struct.hoge.10*, i8**, i8**, i32*, i32*, i8*, i32, i32, i32* } |
| %struct.bar = type { i32, i16, i16, %struct.wibble.8, i16, %struct.hoge* } |
| %struct.wibble.8 = type { i32 } |
| %struct.barney.9 = type { i16, i16 } |
| %struct.hoge.10 = type { i16, i16, i16, i16, i16 } |
| %struct.bar.11 = type { i64, i64 } |
| |
| @global = external global i32, align 4 |
| @global1 = external global i32, align 4 |
| @global2 = external global i8*, align 8 |
| @global3 = external global %struct.hoge**, align 8 |
| @global4 = external global %struct.hoge**, align 8 |
| |
| ; Function Attrs: uwtable |
| define i32 @foo(%struct.foo* %arg) #0 personality i8* bitcast (i32 (...)* @blam to i8*) { |
| bb: |
| br label %bb3 |
| |
| bb3: ; preds = %bb |
| %tmp = load i32, i32* @global, align 4, !tbaa !1 |
| %tmp4 = add i32 %tmp, -1 |
| %tmp5 = icmp eq i32 0, 0 |
| br i1 %tmp5, label %bb12, label %bb6 |
| |
| bb6: ; preds = %bb3 |
| br label %bb7 |
| |
| bb7: ; preds = %bb7, %bb6 |
| %tmp8 = load i32, i32* @global, align 4, !tbaa !1 |
| %tmp9 = and i32 %tmp8, 3 |
| %tmp10 = icmp eq i32 %tmp9, 0 |
| br i1 %tmp10, label %bb11, label %bb7 |
| |
| bb11: ; preds = %bb7 |
| br label %bb12 |
| |
| bb12: ; preds = %bb11, %bb3 |
| invoke void @zot(%struct.hoge* nonnull undef, i32 %tmp4, i32 undef, i32 9, i32 0, i32 39, %struct.hoge* undef, i32 undef, i32 undef, %struct.bar.11* nonnull undef) |
| to label %bb13 unwind label %bb17 |
| |
| bb13: ; preds = %bb12 |
| br i1 undef, label %bb16, label %bb14 |
| |
| bb14: ; preds = %bb13 |
| br label %bb19 |
| |
| bb15: ; preds = %bb19 |
| br label %bb16 |
| |
| bb16: ; preds = %bb15, %bb13 |
| ret i32 0 |
| |
| bb17: ; preds = %bb12 |
| %tmp18 = landingpad { i8*, i32 } |
| cleanup |
| resume { i8*, i32 } %tmp18 |
| |
| bb19: ; preds = %bb19, %bb14 |
| br i1 undef, label %bb15, label %bb19 |
| } |
| |
| ; Function Attrs: argmemonly nounwind |
| declare void @llvm.lifetime.start(i64, i8* nocapture) #1 |
| |
| ; Function Attrs: nounwind readnone |
| declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #2 |
| |
| ; Function Attrs: nobuiltin |
| declare noalias i8* @eggs(i64) #3 |
| |
| ; Function Attrs: nobuiltin |
| declare noalias i8* @bar(i64) #3 |
| |
| ; Function Attrs: uwtable |
| declare void @zot(%struct.hoge*, i32, i32, i32, i32, i32, %struct.hoge*, i32, i32, %struct.bar.11*) unnamed_addr #0 align 2 |
| |
| declare i32 @blam(...) |
| |
| ; Function Attrs: nobuiltin nounwind |
| declare void @zot5(i8*) #4 |
| |
| ; Function Attrs: argmemonly nounwind |
| declare void @llvm.lifetime.end(i64, i8* nocapture) #1 |
| |
| ; Function Attrs: uwtable |
| declare i32 @eggs6(%struct.foo*) #0 |
| |
| ; Function Attrs: nounwind uwtable |
| declare void @eggs7(%struct.widget*, i32, i32, i32) unnamed_addr #5 align 2 |
| |
| attributes #0 = { uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } |
| attributes #1 = { argmemonly nounwind } |
| attributes #2 = { nounwind readnone } |
| attributes #3 = { nobuiltin "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } |
| attributes #4 = { nobuiltin nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } |
| attributes #5 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } |
| |
| !llvm.ident = !{!0} |
| |
| !0 = !{!"clang version 3.8.0 (trunk 252700) (llvm/trunk 252705)"} |
| !1 = !{!2, !2, i64 0} |
| !2 = !{!"int", !3, i64 0} |
| !3 = !{!"omnipotent char", !4, i64 0} |
| !4 = !{!"Simple C/C++ TBAA"} |