Skip to content

Commit fc4bb1c

Browse files
committed
create int_spv_faceforward intrinsic, create faceforward lowering & map to int_spv_faceforward, create SPIR-V backend test case
1 parent d995b2e commit fc4bb1c

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

llvm/include/llvm/IR/IntrinsicsSPIRV.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ let TargetPrefix = "spv" in {
6767
def int_spv_cross : DefaultAttrsIntrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
6868
def int_spv_degrees : DefaultAttrsIntrinsic<[LLVMMatchType<0>], [llvm_anyfloat_ty], [IntrNoMem]>;
6969
def int_spv_distance : DefaultAttrsIntrinsic<[LLVMVectorElementType<0>], [llvm_anyfloat_ty, LLVMMatchType<0>], [IntrNoMem]>;
70+
def int_spv_faceforward : DefaultAttrsIntrinsic<[LLVMMatchType<0>], [llvm_anyfloat_ty, LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
7071
def int_spv_frac : DefaultAttrsIntrinsic<[LLVMMatchType<0>], [llvm_anyfloat_ty], [IntrNoMem]>;
7172
def int_spv_lerp : DefaultAttrsIntrinsic<[LLVMMatchType<0>], [llvm_anyfloat_ty, LLVMMatchType<0>,LLVMMatchType<0>],
7273
[IntrNoMem] >;

llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3083,6 +3083,8 @@ bool SPIRVInstructionSelector::selectIntrinsic(Register ResVReg,
30833083
return selectExtInst(ResVReg, ResType, I, CL::length, GL::Length);
30843084
case Intrinsic::spv_degrees:
30853085
return selectExtInst(ResVReg, ResType, I, CL::degrees, GL::Degrees);
3086+
case Intrinsic::spv_faceforward:
3087+
return selectExtInst(ResVReg, ResType, I, GL::FaceForward);
30863088
case Intrinsic::spv_frac:
30873089
return selectExtInst(ResVReg, ResType, I, CL::fract, GL::Fract);
30883090
case Intrinsic::spv_normalize:
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv-unknown-unknown %s -o - | FileCheck %s
2+
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-unknown %s -o - -filetype=obj | spirv-val --target-env vulkan1.3 %}
3+
4+
; Make sure SPIRV operation function calls for faceforward are lowered correctly.
5+
6+
; CHECK-DAG: %[[#op_ext_glsl:]] = OpExtInstImport "GLSL.std.450"
7+
; CHECK-DAG: %[[#float_16:]] = OpTypeFloat 16
8+
; CHECK-DAG: %[[#vec4_float_16:]] = OpTypeVector %[[#float_16]] 4
9+
; CHECK-DAG: %[[#float_32:]] = OpTypeFloat 32
10+
; CHECK-DAG: %[[#vec4_float_32:]] = OpTypeVector %[[#float_32]] 4
11+
12+
define noundef <4 x half> @faceforward_half4(<4 x half> noundef %a, <4 x half> noundef %b, <4 x half> noundef %c) {
13+
entry:
14+
; CHECK: %[[#]] = OpFunction %[[#vec4_float_16]] None %[[#]]
15+
; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec4_float_16]]
16+
; CHECK: %[[#arg1:]] = OpFunctionParameter %[[#vec4_float_16]]
17+
; CHECK: %[[#arg2:]] = OpFunctionParameter %[[#vec4_float_16]]
18+
; CHECK: %[[#]] = OpExtInst %[[#vec4_float_16]] %[[#op_ext_glsl]] FaceForward %[[#arg0]] %[[#arg1]] %[[#arg2]]
19+
%spv.faceforward = call <4 x half> @llvm.spv.faceforward.f16(<4 x half> %a, <4 x half> %b, <4 x half> %c)
20+
ret <4 x half> %spv.faceforward
21+
}
22+
23+
define noundef <4 x float> @faceforward_float4(<4 x float> noundef %a, <4 x float> noundef %b, <4 x float> noundef %c) {
24+
entry:
25+
; CHECK: %[[#]] = OpFunction %[[#vec4_float_32]] None %[[#]]
26+
; CHECK: %[[#arg0:]] = OpFunctionParameter %[[#vec4_float_32]]
27+
; CHECK: %[[#arg1:]] = OpFunctionParameter %[[#vec4_float_32]]
28+
; CHECK: %[[#arg2:]] = OpFunctionParameter %[[#vec4_float_32]]
29+
; CHECK: %[[#]] = OpExtInst %[[#vec4_float_32]] %[[#op_ext_glsl]] FaceForward %[[#arg0]] %[[#arg1]] %[[#arg2]]
30+
%spv.faceforward = call <4 x float> @llvm.spv.faceforward.f32(<4 x float> %a, <4 x float> %b, <4 x float> %c)
31+
ret <4 x float> %spv.faceforward
32+
}
33+
34+
declare <4 x half> @llvm.spv.faceforward.f16(<4 x half>, <4 x half>, <4 x half>)
35+
declare <4 x float> @llvm.spv.faceforward.f32(<4 x float>, <4 x float>, <4 x float>)

0 commit comments

Comments
 (0)