[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:
Natalie Chouinard 2023-08-30 20:29:56 +00:00
parent e15d72adac
commit 4abe3f18e2
2 changed files with 28 additions and 2 deletions

View File

@ -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";

View 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