[clang] [llvm] [DXIL] Remove incompatible metadata types when preparing DXIL. (PR #136386)
Justin Bogner via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 28 10:36:46 PDT 2025
================
@@ -0,0 +1,29 @@
+; RUN: opt -S --dxil-prepare %s | FileCheck %s
+
+; Test that only metadata nodes that are valid in DXIL are allowed through
+
+target triple = "dxilv1.0-unknown-shadermodel6.0-compute"
+
+; Function Attrs: noinline nounwind memory(readwrite, inaccessiblemem: none)
+define void @main(i32* %ptr) {
+entry:
+ ; metadata ID changes to 0 once the current !0 and !1 are removed
+ ; since they aren't in the whitelist. range needs a payload.
+ ; CHECK: %val = load i32, ptr %ptr, align 4, !range [[RANGEMD:![0-9]+]]
+ %val = load i32, ptr %ptr, align 4, !range !2
+
+ %cmp.i = icmp ult i32 1, 2
+ br i1 %cmp.i, label %_Z4mainDv3_j.exit, label %_Z4mainDv3_j.exit, !llvm.loop !0
+
+_Z4mainDv3_j.exit: ; preds = %for.body.i, %entry
+ ret void
+}
+
+; CHECK: [[RANGEMD]] = !{i32 1, i32 5}
+; this next check line checks that nothing comes after the above check line.
+; No more metadata should be necessary, the rest (the current 0 and 1)
+; should be removed.
+; CHECK-NOT: !{!"llvm.loop.mustprogress"}
----------------
bogner wrote:
`CHECK-NOT` is finicky - if `!{!"llvm.loop.mustprogress"}` prints *before* the range MD this won't fire. We need to use two check-nots, like so
```suggestion
; CHECK-NOT: !{!"llvm.loop.mustprogress"}
; CHECK: [[RANGEMD]] = !{i32 1, i32 5}
; CHECK-NOT: !{!"llvm.loop.mustprogress"}
```
https://github.com/llvm/llvm-project/pull/136386
More information about the cfe-commits
mailing list