xref: /llvm-project/llvm/test/Transforms/JumpThreading/noalias-scope-decl.ll (revision 07e34d2de565a88da2724d52cdcf47b4bca873db)
15e7e499bSNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*07e34d2dSMatt Arsenault; RUN: opt -S -passes=jump-threading < %s | FileCheck %s
35e7e499bSNikita Popov
483d50527SMatt Arsenaultdefine void @test(ptr %ptr) {
55e7e499bSNikita Popov; CHECK-LABEL: @test(
65e7e499bSNikita Popov; CHECK-NEXT:  entry:
75e7e499bSNikita Popov; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)
85e7e499bSNikita Popov; CHECK-NEXT:    br label [[LOOP:%.*]]
95e7e499bSNikita Popov; CHECK:       loop:
105e7e499bSNikita Popov; CHECK-NEXT:    [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_INC:%.*]], [[LATCH:%.*]] ]
115e7e499bSNikita Popov; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[I]], 100
125e7e499bSNikita Popov; CHECK-NEXT:    br i1 [[C]], label [[EXIT:%.*]], label [[LATCH]]
135e7e499bSNikita Popov; CHECK:       latch:
145e7e499bSNikita Popov; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !3)
1583d50527SMatt Arsenault; CHECK-NEXT:    store i8 0, ptr [[PTR:%.*]], align 1, !noalias !0
1683d50527SMatt Arsenault; CHECK-NEXT:    store i8 1, ptr [[PTR]], align 1, !noalias !3
175e7e499bSNikita Popov; CHECK-NEXT:    [[I_INC]] = add i32 [[I]], 1
185e7e499bSNikita Popov; CHECK-NEXT:    br label [[LOOP]]
195e7e499bSNikita Popov; CHECK:       exit:
205e7e499bSNikita Popov; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !5)
2183d50527SMatt Arsenault; CHECK-NEXT:    store i8 0, ptr [[PTR]], align 1, !noalias !0
2283d50527SMatt Arsenault; CHECK-NEXT:    store i8 1, ptr [[PTR]], align 1, !noalias !5
235e7e499bSNikita Popov; CHECK-NEXT:    ret void
245e7e499bSNikita Popov;
255e7e499bSNikita Popoventry:
265e7e499bSNikita Popov  call void @llvm.experimental.noalias.scope.decl(metadata !0)
275e7e499bSNikita Popov  br label %loop
285e7e499bSNikita Popov
295e7e499bSNikita Popovloop:
305e7e499bSNikita Popov  %i = phi i32 [ 0, %entry ], [ %i.inc, %latch ]
315e7e499bSNikita Popov  %c = icmp eq i32 %i, 100
325e7e499bSNikita Popov  br i1 %c, label %if, label %latch
335e7e499bSNikita Popov
345e7e499bSNikita Popovif:
355e7e499bSNikita Popov  br label %latch
365e7e499bSNikita Popov
375e7e499bSNikita Popovlatch:
385e7e499bSNikita Popov  %p = phi i1 [ true, %if ], [ false, %loop ]
395e7e499bSNikita Popov  call void @llvm.experimental.noalias.scope.decl(metadata !3)
4083d50527SMatt Arsenault  store i8 0, ptr %ptr, !noalias !0
4183d50527SMatt Arsenault  store i8 1, ptr %ptr, !noalias !3
425e7e499bSNikita Popov  %i.inc = add i32 %i, 1
435e7e499bSNikita Popov  br i1 %p, label %exit, label %loop
445e7e499bSNikita Popov
455e7e499bSNikita Popovexit:
465e7e499bSNikita Popov  ret void
475e7e499bSNikita Popov}
485e7e499bSNikita Popov
495e7e499bSNikita Popovdeclare void @llvm.experimental.noalias.scope.decl(metadata)
505e7e499bSNikita Popov
515e7e499bSNikita Popov!0 = !{!1}
525e7e499bSNikita Popov!1 = distinct !{!1, !2, !"scope1"}
535e7e499bSNikita Popov!2 = distinct !{!2, !"domain"}
545e7e499bSNikita Popov!3 = !{!4}
555e7e499bSNikita Popov!4 = distinct !{!4, !2, !"scope2"}
565e7e499bSNikita Popov
575e7e499bSNikita Popov; CHECK: !0 = !{!1}
585e7e499bSNikita Popov; CHECK: !1 = distinct !{!1, !2, !"scope1"}
595e7e499bSNikita Popov; CHECK: !2 = distinct !{!2, !"domain"}
605e7e499bSNikita Popov; CHECK: !3 = !{!4}
615e7e499bSNikita Popov; CHECK: !4 = distinct !{!4, !2, !"scope2"}
625e7e499bSNikita Popov; CHECK: !5 = !{!6}
635e7e499bSNikita Popov; CHECK: !6 = distinct !{!6, !2, !"scope2:thread"}
64