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