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