Refines OpName emission to only target Global Variables, Functions, Function Parameters, Local Variables (allocas/phis), and Basic Blocks. This reduces binary size and clutter by avoiding OpName for every intermediate instruction (arithmetic, casts, etc.), while preserving readability for interfaces and program structure. Also updates the test suite to align with this change: - Removes OpName checks for intermediate instructions. - Adds side-effects (e.g., volatile stores) to tests where instructions were previously kept alive solely by their OpName usage. - Updates checks to use generic ID matching where specific names are no longer available. - Adds debug-info/opname-filtering.ll to verify the new policy.
66 lines
2.8 KiB
LLVM
66 lines
2.8 KiB
LLVM
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
|
|
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
|
|
|
|
; CHECK-SPIRV-NOT: OpDecorate %[[#]] FPFastMathMode
|
|
; CHECK-SPIRV-DAG: OpDecorate %[[#r2:]] FPFastMathMode NotNaN
|
|
; CHECK-SPIRV-DAG: OpDecorate %[[#r3:]] FPFastMathMode NotInf
|
|
; CHECK-SPIRV-DAG: OpDecorate %[[#r4:]] FPFastMathMode NSZ
|
|
; CHECK-SPIRV-DAG: OpDecorate %[[#r5:]] FPFastMathMode AllowRecip
|
|
; CHECK-SPIRV-DAG: OpDecorate %[[#r6:]] FPFastMathMode NotNaN|NotInf|NSZ|AllowRecip|Fast
|
|
; CHECK-SPIRV-DAG: OpDecorate %[[#r7:]] FPFastMathMode NotNaN|NotInf
|
|
; CHECK-SPIRV-DAG: %[[#float:]] = OpTypeFloat 32
|
|
; CHECK-SPIRV-DAG: %[[#double:]] = OpTypeFloat 64
|
|
|
|
; CHECK-SPIRV: %[[#r1:]] = OpFAdd %[[#float]]
|
|
; CHECK-SPIRV: %[[#r2]] = OpFAdd %[[#float]]
|
|
; CHECK-SPIRV: %[[#r3]] = OpFAdd %[[#float]]
|
|
; CHECK-SPIRV: %[[#r4]] = OpFAdd %[[#float]]
|
|
; CHECK-SPIRV: %[[#r5]] = OpFAdd %[[#float]]
|
|
; CHECK-SPIRV: %[[#r6]] = OpFAdd %[[#float]]
|
|
; CHECK-SPIRV: %[[#r7]] = OpFAdd %[[#float]]
|
|
define spir_kernel void @testFAdd_float(float %a, float %b, ptr addrspace(1) %out) {
|
|
entry:
|
|
%r1 = fadd float %a, %b
|
|
store volatile float %r1, float addrspace(1)* %out
|
|
%r2 = fadd nnan float %a, %b
|
|
store volatile float %r2, float addrspace(1)* %out
|
|
%r3 = fadd ninf float %a, %b
|
|
store volatile float %r3, float addrspace(1)* %out
|
|
%r4 = fadd nsz float %a, %b
|
|
store volatile float %r4, float addrspace(1)* %out
|
|
%r5 = fadd arcp float %a, %b
|
|
store volatile float %r5, float addrspace(1)* %out
|
|
%r6 = fadd fast float %a, %b
|
|
store volatile float %r6, float addrspace(1)* %out
|
|
%r7 = fadd nnan ninf float %a, %b
|
|
store volatile float %r7, float addrspace(1)* %out
|
|
ret void
|
|
}
|
|
|
|
; CHECK-SPIRV: %[[#]] = OpFAdd %[[#double]]
|
|
; CHECK-SPIRV: %[[#]] = OpFAdd %[[#double]]
|
|
; CHECK-SPIRV: %[[#]] = OpFAdd %[[#double]]
|
|
; CHECK-SPIRV: %[[#]] = OpFAdd %[[#double]]
|
|
; CHECK-SPIRV: %[[#]] = OpFAdd %[[#double]]
|
|
; CHECK-SPIRV: %[[#]] = OpFAdd %[[#double]]
|
|
; CHECK-SPIRV: %[[#]] = OpFAdd %[[#double]]
|
|
|
|
define spir_kernel void @testFAdd_double(double %a, double %b, double addrspace(1)* %out) local_unnamed_addr {
|
|
entry:
|
|
%r11 = fadd double %a, %b
|
|
store volatile double %r11, double addrspace(1)* %out
|
|
%r12 = fadd nnan double %a, %b
|
|
store volatile double %r12, double addrspace(1)* %out
|
|
%r13 = fadd ninf double %a, %b
|
|
store volatile double %r13, double addrspace(1)* %out
|
|
%r14 = fadd nsz double %a, %b
|
|
store volatile double %r14, double addrspace(1)* %out
|
|
%r15 = fadd arcp double %a, %b
|
|
store volatile double %r15, double addrspace(1)* %out
|
|
%r16 = fadd fast double %a, %b
|
|
store volatile double %r16, double addrspace(1)* %out
|
|
%r17 = fadd nnan ninf double %a, %b
|
|
store volatile double %r17, double addrspace(1)* %out
|
|
ret void
|
|
}
|