brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · e7f4d60 Raw
60 lines · plain
1; RUN: opt %loadNPMPolly -polly-stmt-granularity=bb '-passes=polly-custom<scops>' -polly-print-scops -polly-invariant-load-hoisting=true -disable-output < %s 2>&1 | FileCheck %s2; RUN: opt %loadNPMPolly -polly-stmt-granularity=bb '-passes=polly<no-default-opts>' -polly-invariant-load-hoisting=true -disable-output < %s3 4; The loop for.body is a scop with invariant load hoisting, but does not5; terminate predictably for ScalarEvolution. The scalar %1 therefore is not6; synthesizable using SCEVExpander. We therefore must have Stmt_for_end_loopexit7; to catch the induction variable at loop exit. We also check for not crashing8; at codegen because SCEVExpander would use the original induction variable in9; generated code.10 11%struct.bit_stream_struc.3.43.51.71.83.91.99.107.154 = type { ptr, i32, ptr, ptr, i32, i64, i32, i32 }12%struct._IO_FILE.1.41.49.69.81.89.97.105.153 = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i16, i8, [1 x i8], ptr, i64, ptr, ptr, ptr, ptr, i64, i32, [20 x i8] }13%struct._IO_marker.0.40.48.68.80.88.96.104.152 = type { ptr, ptr, i32 }14 15define i32 @copy_buffer(ptr nocapture %bs) {16entry:17  %buf_byte_idx5.phi.trans.insert = getelementptr inbounds %struct.bit_stream_struc.3.43.51.71.83.91.99.107.154, ptr %bs, i64 0, i32 618  br i1 undef, label %for.body, label %cleanup19 20for.body:21  %indvars.iv28 = phi i64 [ %indvars.iv.next29, %for.body ], [ 0, %entry ]22  %indvars.iv.next29 = add nuw nsw i64 %indvars.iv28, 123  %0 = load i32, ptr %buf_byte_idx5.phi.trans.insert, align 824  %cmp6 = icmp sgt i32 0, %025  br i1 %cmp6, label %for.body, label %for.end.loopexit26 27for.end.loopexit:28  %var1 = trunc i64 %indvars.iv.next29 to i3229  br label %cleanup30 31cleanup:32  %retval.0 = phi i32 [ 0, %entry ], [ %var1, %for.end.loopexit ]33  ret i32 %retval.034}35 36 37; CHECK:      Invariant Accesses: {38; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 0]39; CHECK-NEXT:             [p_0_loaded_from_bs] -> { Stmt_for_body[i0] -> MemRef_bs[11] };40; CHECK-NEXT:         Execution Context: [p_0_loaded_from_bs] -> {  :  }41; CHECK-NEXT: }42; CHECK:      Statements {43; CHECK-NEXT:     Stmt_for_body44; CHECK-NEXT:         Domain :=45; CHECK-NEXT:             [p_0_loaded_from_bs] -> { Stmt_for_body[0] : p_0_loaded_from_bs >= 0 };46; CHECK-NEXT:         Schedule :=47; CHECK-NEXT:             [p_0_loaded_from_bs] -> { Stmt_for_body[i0] -> [0, 0] };48; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]49; CHECK-NEXT:             [p_0_loaded_from_bs] -> { Stmt_for_body[i0] -> MemRef_indvars_iv_next29[] };50; CHECK-NEXT:     Stmt_for_end_loopexit51; CHECK-NEXT:         Domain :=52; CHECK-NEXT:             [p_0_loaded_from_bs] -> { Stmt_for_end_loopexit[] : p_0_loaded_from_bs >= 0 };53; CHECK-NEXT:         Schedule :=54; CHECK-NEXT:             [p_0_loaded_from_bs] -> { Stmt_for_end_loopexit[] -> [1, 0] };55; CHECK-NEXT:         ReadAccess :=    [Reduction Type: NONE] [Scalar: 1]56; CHECK-NEXT:             [p_0_loaded_from_bs] -> { Stmt_for_end_loopexit[] -> MemRef_indvars_iv_next29[] };57; CHECK-NEXT:         MustWriteAccess :=    [Reduction Type: NONE] [Scalar: 1]58; CHECK-NEXT:             [p_0_loaded_from_bs] -> { Stmt_for_end_loopexit[] -> MemRef_var1[] };59; CHECK-NEXT: }60