[PATCH] D133279: [DirectX backend] Remove Attribute not for DXIL on CallInst

Xiang Li via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 4 16:08:28 PDT 2022


python3kgae created this revision.
python3kgae added reviewers: beanz, pow2clk, bogner.
Herald added a subscriber: hiraditya.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Remove Attribute on CallInst which is not for DXIL when prepare for DXIL.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D133279

Files:
  llvm/lib/Target/DirectX/DXILPrepare.cpp
  llvm/test/CodeGen/DirectX/strip-call-attrs.ll


Index: llvm/test/CodeGen/DirectX/strip-call-attrs.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/DirectX/strip-call-attrs.ll
@@ -0,0 +1,25 @@
+
+; RUN: opt -S -dxil-prepare < %s | FileCheck %s
+target triple = "dxil-unknown-unknown"
+
+ at f = internal unnamed_addr global float 0.000000e+00, align 4
+ at llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_static_global.hlsl, ptr null }]
+
+; Make sure noundef is removed for function.
+; CHECK:declare float @"?init@@YAMXZ"()
+declare noundef float @"?init@@YAMXZ"() local_unnamed_addr #0
+
+; Make sure noundef is removed for call.
+; CHECK: %call.i = tail call float @"?init@@YAMXZ"()
+; Function Attrs: nounwind
+define internal void @_GLOBAL__sub_I_static_global.hlsl() #1 {
+entry:
+  %call.i = tail call noundef float @"?init@@YAMXZ"() #2
+  store float %call.i, ptr @f, align 4
+  ret void
+}
+
+attributes #0 = { "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
+attributes #1 = { nounwind "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
+attributes #2 = { nounwind }
+
Index: llvm/lib/Target/DirectX/DXILPrepare.cpp
===================================================================
--- llvm/lib/Target/DirectX/DXILPrepare.cpp
+++ llvm/lib/Target/DirectX/DXILPrepare.cpp
@@ -160,6 +160,13 @@
               GEP->setOperand(0, NoOpBitcast);
             continue;
           }
+          if (auto *CI = dyn_cast<CallInst>(&I)) {
+            CI->removeFnAttrs(AttrMask);
+            CI->removeRetAttrs(AttrMask);
+            for (size_t Idx = 0, End = CI->arg_size(); Idx < End; ++Idx)
+              CI->removeParamAttrs(Idx, AttrMask);
+            continue;
+          }
         }
       }
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133279.457875.patch
Type: text/x-patch
Size: 1880 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220904/8be6d189/attachment.bin>


More information about the llvm-commits mailing list