llvm-project/llvm/test/CodeGen/DirectX/legalize-load-store-array-alloca.ll
Deric C. 689e95817e
[DirectX] Add a GEP to scalar load/store on globals and remove incorrect assertion (#149191)
Fixes #149180

This PR removes an assertion that triggered on valid IR. It has been
replaced with an if statement that returns early if the conditions are
not correct.

This PR also adds GEPs to scalar loads and stores from/to global
variables.
2025-07-17 14:46:45 -07:00

42 lines
1.5 KiB
LLVM

; RUN: opt -S -passes='dxil-legalize' -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s
define float @load() {
; CHECK-LABEL: define float @load
; CHECK-NEXT: [[ALLOCA:%.*]] = alloca [2 x float], align 4
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds nuw [2 x float], ptr [[ALLOCA]], i32 0, i32 0
; CHECK-NEXT: [[LOAD:%.*]] = load float, ptr [[GEP]], align 4
; CHECK-NEXT: ret float [[LOAD]]
%a = alloca [2 x float], align 4
%b = load float, ptr %a, align 4
ret float %b
}
define void @store() {
; CHECK-LABEL: define void @store
; CHECK-NEXT: [[ALLOCA:%.*]] = alloca [3 x i32], align 4
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds nuw [3 x i32], ptr [[ALLOCA]], i32 0, i32 0
; CHECK-NEXT: store i32 0, ptr [[GEP]], align 4
; CHECK-NEXT: ret void
%a = alloca [3 x i32], align 4
store i32 0, ptr %a, align 4
ret void
}
@g = local_unnamed_addr addrspace(3) global [4 x i32] zeroinitializer, align 4
define void @load_whole_global () {
; CHECK-LABEL: define void @load_whole_global
; CHECK-NEXT: load [4 x i32], ptr addrspace(3) @g, align 4
; CHECK-NEXT: ret void
%l = load [4 x i32], ptr addrspace(3) @g, align 4
ret void
}
define void @load_global_index0 () {
; CHECK-LABEL: define void @load_global_index0
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds nuw [4 x i32], ptr addrspace(3) @g, i32 0, i32 0
; CHECK-NEXT: load i32, ptr addrspace(3) [[GEP]], align 4
; CHECK-NEXT: ret void
%l = load i32, ptr addrspace(3) @g, align 4
ret void
}