| ; This test is to ensure that OpExtInst generated by NonSemantic_Shader_DebugInfo_100 |
| ; are not mixed up with other OpExtInst instructions. |
| ; The code of the test is a reproducer, because "lgamma" has the same code (35) |
| ; inside OpenCL_std as DebugSource inside NonSemantic_Shader_DebugInfo_100. |
| |
| ; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s |
| ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %} |
| |
| ; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s |
| ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %} |
| |
| ; CHECK: %[[#Ocl:]] = OpExtInstImport "OpenCL.std" |
| ; CHECK: OpName %[[#Fun:]] "__devicelib_lgammaf" |
| ; CHECK: %[[#Fun]] = OpFunction %[[#]] None %[[#]] |
| ; CHECK: OpFunctionParameter |
| ; CHECK: %[[#]] = OpExtInst %[[#]] %[[#Ocl]] lgamma %[[#]] |
| |
| define weak_odr dso_local spir_kernel void @foo() { |
| entry: |
| %r = tail call spir_func noundef float @lgammaf(float noundef 0x7FF8000000000000) |
| ret void |
| } |
| |
| define weak dso_local spir_func float @lgammaf(float noundef %x) { |
| entry: |
| %call = tail call spir_func float @__devicelib_lgammaf(float noundef %x) |
| ret float %call |
| } |
| |
| define weak dso_local spir_func float @__devicelib_lgammaf(float noundef %x) { |
| entry: |
| %call = tail call spir_func noundef float @_Z18__spirv_ocl_lgammaf(float noundef %x) |
| ret float %call |
| } |
| |
| declare dso_local spir_func noundef float @_Z18__spirv_ocl_lgammaf(float noundef) |