aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/CodeGen/DirectX/metadata-stripping.ll
blob: 22e78eaeea2a43fa1d4dcf61a49196e103f335f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
; 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 allowlist. 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
  ; Ensure that the !llvm.loop metadata node gets dropped.
  ; CHECK: br i1 %cmp.i, label %_Z4mainDv3_j.exit, label %_Z4mainDv3_j.exit{{$}}
  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
}

; These next check lines check that only the range metadata remains
; No more metadata should be necessary, the rest (the current 0 and 1)
; should be removed.
; CHECK-NOT: !{!"llvm.loop.mustprogress"}
; CHECK: [[RANGEMD]] = !{i32 1, i32 5}
; CHECK-NOT: !{!"llvm.loop.mustprogress"}
!0 = distinct !{!0, !1}
!1 = !{!"llvm.loop.mustprogress"}
!2 = !{i32 1, i32 5}