| ; RUN: opt %loadPolly -polly-codegen -S \ |
| ; RUN: -polly-invariant-load-hoisting=true < %s | FileCheck %s |
| |
| ; bugpoint-reduced testcase of MiBench/consumer-lame/quantize-pvt.c from the |
| ; test-suite. |
| ; It features a SCEV that is used in two BasicBlock within a non-affine |
| ; subregion where none of the blocks dominate the other. We check that the SCEV |
| ; is expanded independently for both BasicBlocks instead of just once for the |
| ; whole subregion. |
| |
| ; CHECK-LABEL: polly.stmt.if.then.110: |
| ; CHECK: %[[R1_1:[0-9]*]] = mul nuw nsw i64 %polly.indvar[[R0_1:[0-9]*]], 30 |
| ; CHECK: %scevgep[[R1_2:[0-9]*]] = getelementptr i32, i32* %scevgep{{[0-9]*}}, i64 %[[R1_1]] |
| ; CHECK: store i32 0, i32* %scevgep[[R1_2]], align 8 |
| |
| ; CHECK-LABEL: polly.stmt.if.else: |
| ; CHECK: %[[R2_1:[0-9]*]] = mul nuw nsw i64 %polly.indvar[[R0_1]], 30 |
| ; CHECK: %scevgep[[R2_2:[0-9]*]] = getelementptr i32, i32* %scevgep{{[0-9]*}}, i64 %[[R2_1]] |
| ; CHECK: store i32 21, i32* %scevgep[[R2_2]], align 8 |
| |
| target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" |
| target triple = "x86_64-unknown-linux-gnu" |
| |
| %struct.gr_info.4.59.136.224.290 = type { i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], [3 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32*, [4 x i32] } |
| %struct.gr_info_ss.5.60.137.225.291 = type { %struct.gr_info.4.59.136.224.290 } |
| %struct.anon.6.61.138.226.292 = type { [2 x %struct.gr_info_ss.5.60.137.225.291] } |
| %struct.III_side_info_t.7.62.139.227.293 = type { i32, i32, i32, [2 x [4 x i32]], [2 x %struct.anon.6.61.138.226.292] } |
| %struct.lame_global_flags.3.58.135.223.289 = type { i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8*, i8*, i32, i32, float, i32, i32, i32, i64, i64, i32, i32, i32, i32, i32, i32, i32, i32, float, i32, i32, i32, float, float, float, float, i32, i32, i32, i32, i32, i32, i32, i32 } |
| |
| @convert_mdct = external global i32, align 4 |
| @reduce_sidechannel = external global i32, align 4 |
| |
| ; Function Attrs: nounwind uwtable |
| define void @iteration_init(%struct.lame_global_flags.3.58.135.223.289* %gfp, %struct.III_side_info_t.7.62.139.227.293* %l3_side, [2 x [576 x i32]]* %l3_enc) #0 { |
| entry: |
| %resvDrain = getelementptr inbounds %struct.III_side_info_t.7.62.139.227.293, %struct.III_side_info_t.7.62.139.227.293* %l3_side, i64 0, i32 2 |
| store i32 0, i32* %resvDrain, align 8 |
| store i32 0, i32* @convert_mdct, align 4 |
| store i32 0, i32* @reduce_sidechannel, align 4 |
| %mode_gr = getelementptr inbounds %struct.lame_global_flags.3.58.135.223.289, %struct.lame_global_flags.3.58.135.223.289* %gfp, i64 0, i32 45 |
| %0 = load i32, i32* %mode_gr, align 8 |
| %cmp95.145 = icmp sgt i32 %0, 0 |
| br i1 %cmp95.145, label %for.cond.98.preheader, label %for.cond.120.preheader |
| |
| for.cond.98.preheader: ; preds = %for.inc.117, %entry |
| %indvars.iv157 = phi i64 [ %indvars.iv.next158, %for.inc.117 ], [ 0, %entry ] |
| %stereo = getelementptr inbounds %struct.lame_global_flags.3.58.135.223.289, %struct.lame_global_flags.3.58.135.223.289* %gfp, i64 0, i32 46 |
| %1 = load i32, i32* %stereo, align 4 |
| %cmp99.143 = icmp sgt i32 %1, 0 |
| br i1 %cmp99.143, label %for.body.101, label %for.inc.117 |
| |
| for.cond.120.preheader: ; preds = %for.inc.117, %entry |
| ret void |
| |
| for.body.101: ; preds = %for.inc.114, %for.cond.98.preheader |
| %indvars.iv155 = phi i64 [ %indvars.iv.next156, %for.inc.114 ], [ 0, %for.cond.98.preheader ] |
| %block_type = getelementptr inbounds %struct.III_side_info_t.7.62.139.227.293, %struct.III_side_info_t.7.62.139.227.293* %l3_side, i64 0, i32 4, i64 %indvars.iv157, i32 0, i64 %indvars.iv155, i32 0, i32 6 |
| %2 = load i32, i32* %block_type, align 8 |
| %cmp108 = icmp eq i32 %2, 2 |
| %sfb_lmax = getelementptr inbounds %struct.III_side_info_t.7.62.139.227.293, %struct.III_side_info_t.7.62.139.227.293* %l3_side, i64 0, i32 4, i64 %indvars.iv157, i32 0, i64 %indvars.iv155, i32 0, i32 16 |
| br i1 %cmp108, label %if.then.110, label %if.else |
| |
| if.then.110: ; preds = %for.body.101 |
| store i32 0, i32* %sfb_lmax, align 8 |
| %sfb_smax = getelementptr inbounds %struct.III_side_info_t.7.62.139.227.293, %struct.III_side_info_t.7.62.139.227.293* %l3_side, i64 0, i32 4, i64 %indvars.iv157, i32 0, i64 %indvars.iv155, i32 0, i32 17 |
| store i32 0, i32* %sfb_smax, align 4 |
| br label %for.inc.114 |
| |
| if.else: ; preds = %for.body.101 |
| store i32 21, i32* %sfb_lmax, align 8 |
| %sfb_smax112 = getelementptr inbounds %struct.III_side_info_t.7.62.139.227.293, %struct.III_side_info_t.7.62.139.227.293* %l3_side, i64 0, i32 4, i64 %indvars.iv157, i32 0, i64 %indvars.iv155, i32 0, i32 17 |
| store i32 12, i32* %sfb_smax112, align 4 |
| br label %for.inc.114 |
| |
| for.inc.114: ; preds = %if.else, %if.then.110 |
| %indvars.iv.next156 = add nuw nsw i64 %indvars.iv155, 1 |
| %3 = load i32, i32* %stereo, align 4 |
| %4 = sext i32 %3 to i64 |
| %cmp99 = icmp slt i64 %indvars.iv.next156, %4 |
| br i1 %cmp99, label %for.body.101, label %for.inc.117 |
| |
| for.inc.117: ; preds = %for.inc.114, %for.cond.98.preheader |
| %indvars.iv.next158 = add nuw nsw i64 %indvars.iv157, 1 |
| %5 = load i32, i32* %mode_gr, align 8 |
| %6 = sext i32 %5 to i64 |
| %cmp95 = icmp slt i64 %indvars.iv.next158, %6 |
| br i1 %cmp95, label %for.cond.98.preheader, label %for.cond.120.preheader |
| } |
| |
| attributes #0 = { 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"="+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" } |