; 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} |