[clang] [llvm] [DirectX] Implement Shader Flags Analysis for ResMayNotAlias (PR #131070)

Finn Plummer via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 17 14:22:23 PDT 2025


================
@@ -0,0 +1,39 @@
+; RUN: opt -S --passes="print-dx-shader-flags" 2>&1 %s | FileCheck %s
+
+target triple = "dxil-pc-shadermodel6.8-library"
+
+; CHECK:      Combined Shader Flags for Module
+; CHECK-NEXT: Shader Flags Value: 0x200000010
+
+; CHECK: Note: extra DXIL module flags:
+; CHECK:       Raw and Structured buffers
+; CHECK:       Any UAV may not alias any other UAV
+;
+
+; CHECK: Function loadUAV : 0x20000000
+define float @loadUAV() #0 {
+  %res = call target("dx.TypedBuffer", float, 1, 0, 0)
+      @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, i1 false)
+  %load = call {float, i1} @llvm.dx.resource.load.typedbuffer(
+      target("dx.TypedBuffer", float, 1, 0, 0) %res, i32 0)
+  %val = extractvalue {float, i1} %load, 0
+  ret float %val
+}
+
+; CHECK: Function loadSRV : 0x00000010
+define float @loadSRV() #0 {
+  %res = tail call target("dx.RawBuffer", float, 0, 0)
+      @llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, i1 false)
+  %load = call {float, i1} @llvm.dx.resource.load.rawbuffer(
+      target("dx.RawBuffer", float, 0, 0) %res, i32 0, i32 0)
+  %val = extractvalue { float, i1 } %load, 0
+  ret float %val
+}
+
+!llvm.module.flags = !{!0}
+
+; dx.resmayalias should never appear with a value of 0.
+; But if it does, ensure that it has no effect.
+!0 = !{i32 1, !"dx.resmayalias", i32 0}
----------------
inbelic wrote:

I think the moment we define some metadata we should expect that some user may set the field manually, so having tests for this should definitely be included

https://github.com/llvm/llvm-project/pull/131070


More information about the llvm-commits mailing list