
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.
42 lines
1.5 KiB
LLVM
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
|
|
}
|