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