This will make it easier to switch the default of Polly's invariant load hoisting strategy and also makes it very clear that these test cases indeed require invariant code hoisting to work. llvm-svn: 278667
58 lines
2.6 KiB
LLVM
58 lines
2.6 KiB
LLVM
; RUN: opt %loadPolly -S -polly-codegen -polly-invariant-load-hoisting=true %s | FileCheck %s
|
|
;
|
|
; This crashed at some point as the pointer returned by the call
|
|
; to @__errno_location is invariant and defined in the SCoP but not
|
|
; loaded. Therefore it is not hoisted and consequently not available
|
|
; at the beginning of the SCoP where we would need it if we would try
|
|
; to hoist %tmp. We don't try to hoist %tmp anymore but this test still
|
|
; checks that this passes to code generation and produces valid code.
|
|
;
|
|
; CHECK: polly.start
|
|
;
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
|
|
; Function Attrs: nounwind uwtable
|
|
define void @fileblobSetFilename() #0 {
|
|
entry:
|
|
br i1 undef, label %if.end, label %cleanup
|
|
|
|
if.end: ; preds = %entry
|
|
br i1 undef, label %land.lhs.true, label %if.end.18
|
|
|
|
land.lhs.true: ; preds = %if.end
|
|
%call9 = tail call i32* @__errno_location() #2
|
|
%tmp = load i32, i32* %call9, align 4, !tbaa !1
|
|
br i1 false, label %if.then.12, label %if.end.18
|
|
|
|
if.then.12: ; preds = %land.lhs.true
|
|
br label %if.end.18
|
|
|
|
if.end.18: ; preds = %if.then.12, %land.lhs.true, %if.end
|
|
%fd.0 = phi i32 [ undef, %if.then.12 ], [ undef, %land.lhs.true ], [ undef, %if.end ]
|
|
br i1 undef, label %if.then.21, label %if.end.27
|
|
|
|
if.then.21: ; preds = %if.end.18
|
|
unreachable
|
|
|
|
if.end.27: ; preds = %if.end.18
|
|
br label %cleanup
|
|
|
|
cleanup: ; preds = %if.end.27, %entry
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: nounwind readnone
|
|
declare i32* @__errno_location() #1
|
|
|
|
attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #1 = { nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #2 = { nounwind readnone }
|
|
|
|
!llvm.ident = !{!0}
|
|
|
|
!0 = !{!"clang version 3.8.0 (trunk 250010) (llvm/trunk 250018)"}
|
|
!1 = !{!2, !2, i64 0}
|
|
!2 = !{!"int", !3, i64 0}
|
|
!3 = !{!"omnipotent char", !4, i64 0}
|
|
!4 = !{!"Simple C/C++ TBAA"}
|