diff options
author | Ruiling, Song <ruiling.song@amd.com> | 2025-09-02 21:50:47 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-02 21:50:47 +0800 |
commit | 45dec71725bd57831051c27e43da698c23de1a52 (patch) | |
tree | a949956e79338aed79a0352d128edaf4ec6297f1 /llvm/test/Transforms | |
parent | 89f53af3fffed3e41167fbb7bc10d4885cd97c7f (diff) | |
download | llvm-main.zip llvm-main.tar.gz llvm-main.tar.bz2 |
Our GPU compiler usually construct pointers through inttoptr. The memory
was pre-allocated before the shader function execution and remains valid
through the execution of the shader function. This brings back the
expected behavior of instruction hoisting for the test
`hoist-speculatable-load.ll`, which was broken by #126117.
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r-- | llvm/test/Transforms/LICM/hoist-speculatable-load.ll | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/llvm/test/Transforms/LICM/hoist-speculatable-load.ll b/llvm/test/Transforms/LICM/hoist-speculatable-load.ll index a4a38c2..31236e8 100644 --- a/llvm/test/Transforms/LICM/hoist-speculatable-load.ll +++ b/llvm/test/Transforms/LICM/hoist-speculatable-load.ll @@ -4,19 +4,19 @@ define void @f(i32 %ptr_i, ptr %ptr2, i1 %cond) { ; CHECK-LABEL: @f( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[PTR:%.*]] = inttoptr i32 [[PTR_I:%.*]] to ptr +; CHECK-NEXT: [[PTR:%.*]] = inttoptr i32 [[PTR_I:%.*]] to ptr, !nofree [[META0:![0-9]+]] ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR]], i32 16), "dereferenceable"(ptr [[PTR]], i32 16) ] ; CHECK-NEXT: br i1 [[COND:%.*]], label [[FOR_BODY_LR_PH:%.*]], label [[IF0:%.*]] ; CHECK: if0: ; CHECK-NEXT: store i32 0, ptr [[PTR2:%.*]], align 4 ; CHECK-NEXT: br label [[FOR_BODY_LR_PH]] ; CHECK: for.body.lr.ph: +; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 4 ; CHECK-NEXT: br label [[FOR_BODY:%.*]] ; CHECK: for.body: ; CHECK-NEXT: [[I_08:%.*]] = phi i32 [ 0, [[FOR_BODY_LR_PH]] ], [ [[INC:%.*]], [[IF_END:%.*]] ] ; CHECK-NEXT: br i1 [[COND]], label [[IF_END]], label [[IF:%.*]] ; CHECK: if: -; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[PTR]], align 4, !invariant.load [[META0:![0-9]+]] ; CHECK-NEXT: store i32 [[TMP0]], ptr [[PTR2]], align 4 ; CHECK-NEXT: br label [[IF_END]] ; CHECK: if.end: @@ -27,7 +27,7 @@ define void @f(i32 %ptr_i, ptr %ptr2, i1 %cond) { ; CHECK-NEXT: ret void ; entry: - %ptr = inttoptr i32 %ptr_i to ptr + %ptr = inttoptr i32 %ptr_i to ptr, !nofree !{} call void @llvm.assume(i1 true) [ "align"(ptr %ptr, i32 16), "dereferenceable"(ptr %ptr, i32 16) ] br i1 %cond, label %for.body.lr.ph, label %if0 |