[SPIRV] Fix bug in emitting GLSL ext inst names
Lookup extended instruction numbers in the given instruction set so that correct names are now emitted for GLSL.std.450 instructions as well as OpenCL.std. Add a single test to verify correct abs intrinsic names are emitted when targetting logical SPIR-V. Depends on D156424 Differential Revision: https://reviews.llvm.org/D159227
This commit is contained in:
parent
e15d72adac
commit
4abe3f18e2
@ -217,8 +217,7 @@ getExtInstSetFromString(std::string SetName) {
|
||||
std::string getExtInstName(SPIRV::InstructionSet::InstructionSet Set,
|
||||
uint32_t InstructionNumber) {
|
||||
const SPIRV::ExtendedBuiltin *Lookup =
|
||||
SPIRV::lookupExtendedBuiltinBySetAndNumber(
|
||||
SPIRV::InstructionSet::OpenCL_std, InstructionNumber);
|
||||
SPIRV::lookupExtendedBuiltinBySetAndNumber(Set, InstructionNumber);
|
||||
|
||||
if (!Lookup)
|
||||
return "UNKNOWN_EXT_INST";
|
||||
|
||||
27
llvm/test/CodeGen/SPIRV/hlsl-intrinsics/abs.ll
Normal file
27
llvm/test/CodeGen/SPIRV/hlsl-intrinsics/abs.ll
Normal file
@ -0,0 +1,27 @@
|
||||
; RUN: llc -O0 -mtriple=spirv-unknown-linux %s -o - | FileCheck %s
|
||||
|
||||
; CHECK: OpExtInstImport "GLSL.std.450"
|
||||
|
||||
define void @main() #1 {
|
||||
entry:
|
||||
%i = alloca i32, align 4
|
||||
%absi = alloca i32, align 4
|
||||
%f = alloca float, align 4
|
||||
%absf = alloca float, align 4
|
||||
%0 = load i32, ptr %i, align 4
|
||||
|
||||
; CHECK: %[[#]] = OpExtInst %[[#]] %[[#]] SAbs %[[#]]
|
||||
%elt.abs = call i32 @llvm.abs.i32(i32 %0, i1 false)
|
||||
|
||||
store i32 %elt.abs, ptr %absi, align 4
|
||||
%1 = load float, ptr %f, align 4
|
||||
|
||||
; CHECK: %[[#]] = OpExtInst %[[#]] %[[#]] FAbs %[[#]]
|
||||
%elt.abs1 = call float @llvm.fabs.f32(float %1)
|
||||
|
||||
store float %elt.abs1, ptr %absf, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
declare i32 @llvm.abs.i32(i32, i1 immarg) #2
|
||||
declare float @llvm.fabs.f32(float) #2
|
||||
Loading…
x
Reference in New Issue
Block a user