[llvm] [SPIR-V] Emit FuncParamAttr Zext/Sext for return type attributes (PR #223724)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 15 07:48:00 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-spir-v
Author: Arseniy Obolenskiy (aobolensk)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/223724.diff
2 Files Affected:
- (modified) llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp (+15)
- (modified) llvm/test/CodeGen/SPIRV/transcoding/func_param_attr.ll (+14)
``````````diff
diff --git a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
index 0fe4451d50ad7..279c32ca004b8 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
@@ -394,6 +394,21 @@ bool SPIRVCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,
GR->addGlobalObject(&Arg, &MIRBuilder.getMF(), ArgReg);
i++;
}
+ if (!ST->isShader()) {
+ if (F.hasRetAttribute(Attribute::ZExt)) {
+ auto Attr =
+ static_cast<unsigned>(SPIRV::FunctionParameterAttribute::Zext);
+ buildOpDecorate(FuncVReg, MIRBuilder, SPIRV::Decoration::FuncParamAttr,
+ {Attr});
+ }
+ if (F.hasRetAttribute(Attribute::SExt)) {
+ auto Attr =
+ static_cast<unsigned>(SPIRV::FunctionParameterAttribute::Sext);
+ buildOpDecorate(FuncVReg, MIRBuilder, SPIRV::Decoration::FuncParamAttr,
+ {Attr});
+ }
+ }
+
// Name the function.
if (F.hasName())
buildOpName(FuncVReg, F.getName(), MIRBuilder);
diff --git a/llvm/test/CodeGen/SPIRV/transcoding/func_param_attr.ll b/llvm/test/CodeGen/SPIRV/transcoding/func_param_attr.ll
index e158477a3627c..dc76c54d34a6a 100644
--- a/llvm/test/CodeGen/SPIRV/transcoding/func_param_attr.ll
+++ b/llvm/test/CodeGen/SPIRV/transcoding/func_param_attr.ll
@@ -7,6 +7,8 @@
; CHECK-SPIRV-DAG: OpDecorate %[[#NOALIAS:]] FuncParamAttr NoAlias
; CHECK-SPIRV-DAG: OpDecorate %[[#BYVAL:]] FuncParamAttr ByVal
; CHECK-SPIRV-DAG: OpDecorate %[[#SRET:]] FuncParamAttr Sret
+; CHECK-SPIRV-DAG: OpDecorate %[[#RET_ZEXT:]] FuncParamAttr Zext
+; CHECK-SPIRV-DAG: OpDecorate %[[#RET_SEXT:]] FuncParamAttr Sext
; CHECK-SPIRV: %[[#ZEXT]] = OpFunctionParameter %[[#]]
define spir_func void @test_zext(i8 zeroext %arg) {
@@ -43,3 +45,15 @@ define spir_func void @test_sret(ptr sret(i32) %arg) {
entry:
ret void
}
+
+; CHECK-SPIRV: %[[#RET_ZEXT]] = OpFunction %[[#]]
+define spir_func zeroext i8 @test_ret_zext() {
+entry:
+ ret i8 0
+}
+
+; CHECK-SPIRV: %[[#RET_SEXT]] = OpFunction %[[#]]
+define spir_func signext i8 @test_ret_sext() {
+entry:
+ ret i8 0
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/223724
More information about the llvm-commits
mailing list