llvm-project/llvm/test/CodeGen/AMDGPU/promote-alloca-proper-value-replacement.ll
Ruiling, Song c6fa976d5b
AMDGPU: Make VarIndex WeakTrackingVH in AMDGPUPromoteAlloca (#188921)
The test used to look all good, but actually not. The WeakVH just make
itself null after the pointed value being replaced. So a zero value was
used because VarIndex become null. The test checks looks all good.

Actually only the WeakTrackingVH have the ability to be updated to new
value.

Change the test slightly to make that using zero index is wrong.
2026-03-28 09:50:25 +08:00

30 lines
1.3 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -S -mtriple=amdgcn-unknown-unknown -passes=amdgpu-promote-alloca < %s | FileCheck %s
define void @alloca_value_cross_reference() {
; CHECK-LABEL: define void @alloca_value_cross_reference() {
; CHECK-NEXT: [[_ENTRY:.*:]]
; CHECK-NEXT: [[HIT_ORDERED:%.*]] = freeze <4 x float> poison
; CHECK-NEXT: [[HIT_INDEX:%.*]] = freeze <4 x i32> poison
; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i32> [[HIT_INDEX]], i32 1, i32 0
; CHECK-NEXT: br [[DOTLR_PH5:label %.*]]
; CHECK: [[_LR_PH5:.*:]]
; CHECK-NEXT: [[TMP1:%.*]] = extractelement <4 x i32> [[TMP0]], i32 0
; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x float> [[HIT_ORDERED]], float 0.000000e+00, i32 [[TMP1]]
; CHECK-NEXT: ret void
;
.entry:
%hit_ordered = alloca [4 x float], align 4, addrspace(5)
%hit_index = alloca [4 x i32], align 4, addrspace(5)
store i32 1, ptr addrspace(5) %hit_index, align 4
br label %.lr.ph5
; The separate block is needed to avoid constant-folding on
; the load from %hit_index.
.lr.ph5:
%i = load i32, ptr addrspace(5) %hit_index, align 4
%p = getelementptr float, ptr addrspace(5) %hit_ordered, i32 %i
store float 0.000000e+00, ptr addrspace(5) %p, align 4
ret void
}