39 lines · plain
1; RUN: opt -S -verify-memoryssa -passes=loop-sink < %s | FileCheck %s2; RUN: opt -S -verify-memoryssa -aa-pipeline=basic-aa -passes=loop-sink < %s | FileCheck %s3 4; The load instruction should not be sunk into following loop.5; CHECK: @foo6; CHECK-NEXT: entry7; CHECK-NEXT: %ptr = load ptr, ptr %pp, align 88; CHECK-NEXT: store ptr null, ptr %pp, align 89 10define i32 @foo(i32 %n, ptr %pp) !prof !0 {11entry:12 %ptr = load ptr, ptr %pp, align 813 store ptr null, ptr %pp, align 814 br label %for.cond15 16for.cond: ; preds = %for.body, %entry17 %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]18 %cmp = icmp ult i32 %i.0, %n19 br i1 %cmp, label %for.body, label %for.end, !prof !120 21for.body: ; preds = %for.cond22 %0 = sext i32 %i.0 to i6423 %arrayidx = getelementptr inbounds i8, ptr %ptr, i64 %024 %1 = load i8, ptr %arrayidx, align 125 %or19 = call i8 @llvm.bitreverse.i8(i8 %1)26 %v = sext i8 %or19 to i3227 %inc = add i32 %i.0, %v28 br label %for.cond29 30for.end: ; preds = %for.cond31 ret i32 %i.032}33 34declare i8 @llvm.bitreverse.i8(i8) #035attributes #0 = { nounwind readnone speculatable }36 37!0 = !{!"function_entry_count", i64 1}38!1 = !{!"branch_weights", i32 1, i32 2000}39