Before adding a MK_Value READ MemoryAccess, check whether the read is necessary or synthesizable. Synthesizable values are later generated by the SCEVExpander and therefore do not need to be transferred explicitly. This can happen because the check for synthesizability has presumbly been forgotten in the case where a phi's incoming value has been defined in a different statement. Differential Revision: http://reviews.llvm.org/D15687 llvm-svn: 258998
53 lines
2.0 KiB
LLVM
53 lines
2.0 KiB
LLVM
; RUN: opt %loadPolly -polly-codegen -S < %s | FileCheck %s
|
|
|
|
; CHECK-LABEL: polly.merge_new_and_old:
|
|
; CHECK-NEXT: %tmp7.ph.merge = phi %struct.wibble* [ %tmp7.ph.final_reload, %polly.exiting ], [ %tmp7.ph, %bb6.region_exiting ]
|
|
|
|
; CHECK-LABEL: polly.stmt.bb3:
|
|
; CHECK-NEXT: store %struct.wibble* %tmp2, %struct.wibble** %tmp7.s2a
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
|
|
%struct.blam = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
|
|
%struct.wibble = type { i32, %struct.wibble*, %struct.wibble* }
|
|
|
|
@global = external global %struct.blam*, align 8
|
|
|
|
; Function Attrs: nounwind uwtable
|
|
define void @wobble() #0 {
|
|
bb:
|
|
br label %bb1
|
|
|
|
bb1: ; preds = %bb6, %bb
|
|
%tmp2 = phi %struct.wibble* [ %tmp7, %bb6 ], [ undef, %bb ]
|
|
%tmp = load %struct.blam*, %struct.blam** @global, align 8, !tbaa !1
|
|
br label %bb3
|
|
|
|
bb3: ; preds = %bb1
|
|
%tmp4 = getelementptr inbounds %struct.blam, %struct.blam* %tmp, i64 0, i32 1
|
|
br i1 false, label %bb6, label %bb5
|
|
|
|
bb5: ; preds = %bb3
|
|
br label %bb6
|
|
|
|
bb6: ; preds = %bb5, %bb3
|
|
%tmp7 = phi %struct.wibble* [ %tmp2, %bb3 ], [ undef, %bb5 ]
|
|
br i1 undef, label %bb8, label %bb1
|
|
|
|
bb8: ; preds = %bb6
|
|
br label %bb9
|
|
|
|
bb9: ; preds = %bb8
|
|
unreachable
|
|
}
|
|
|
|
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" }
|
|
|
|
!llvm.ident = !{!0}
|
|
|
|
!0 = !{!"clang version 3.8.0 (trunk 250010) (llvm/trunk 250018)"}
|
|
!1 = !{!2, !2, i64 0}
|
|
!2 = !{!"any pointer", !3, i64 0}
|
|
!3 = !{!"omnipotent char", !4, i64 0}
|
|
!4 = !{!"Simple C/C++ TBAA"}
|