mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-30 07:22:55 +01:00
df7f8afaf2
multiple scalar promotions on a single loop. This also has the effect of preserving the order of stores sunk out of loops, which is aesthetically pleasing, and it happens to fix the testcase in PR13542, though it doesn't fix the underlying problem. llvm-svn: 161459
42 lines
1.6 KiB
LLVM
42 lines
1.6 KiB
LLVM
; RUN: opt -tbaa -basicaa -licm -S < %s | FileCheck %s
|
|
|
|
; LICM should keep the stores in their original order when it sinks/promotes them.
|
|
; rdar://12045203
|
|
|
|
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-S128"
|
|
target triple = "x86_64-apple-macosx10.8.0"
|
|
|
|
@p = external global i8*
|
|
|
|
define i32* @_Z4doiti(i32 %n, float* %tmp1, i32* %tmp3) nounwind {
|
|
entry:
|
|
%cmp1 = icmp slt i32 0, %n
|
|
br i1 %cmp1, label %for.body.lr.ph, label %for.end
|
|
|
|
for.body.lr.ph: ; preds = %entry
|
|
br label %for.body
|
|
|
|
for.body: ; preds = %for.body, %for.body.lr.ph
|
|
%i.02 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
|
|
store float 1.000000e+00, float* %tmp1, align 4, !tbaa !1
|
|
store i32 1, i32* %tmp3, align 4, !tbaa !2
|
|
%inc = add nsw i32 %i.02, 1
|
|
%cmp = icmp slt i32 %inc, %n
|
|
br i1 %cmp, label %for.body, label %for.cond.for.end_crit_edge
|
|
|
|
; CHECK: for.cond.for.end_crit_edge:
|
|
; CHECK: store float 1.000000e+00, float* %tmp1
|
|
; CHECK: store i32 1, i32* %tmp3
|
|
for.cond.for.end_crit_edge: ; preds = %for.body
|
|
%split = phi i32* [ %tmp3, %for.body ]
|
|
br label %for.end
|
|
|
|
for.end: ; preds = %for.cond.for.end_crit_edge, %entry
|
|
%r.0.lcssa = phi i32* [ %split, %for.cond.for.end_crit_edge ], [ undef, %entry ]
|
|
ret i32* %r.0.lcssa
|
|
}
|
|
|
|
!0 = metadata !{metadata !"minimal TBAA"}
|
|
!1 = metadata !{metadata !"float", metadata !0}
|
|
!2 = metadata !{metadata !"int", metadata !0}
|