[AArch64][NFC] NFC for const vector as Instruction operand (#116790)
[llvm-project.git] / llvm / test / Transforms / InstCombine / phi-load-metadata-4.ll
blob9d86d189abdca04bf52e65abbab9903b572ad6f8
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
4 declare void @bar()
5 declare void @baz()
7 ; Check that !noundef metadata is combined
8 define ptr @test_phi_combine_load_metadata(i1 %c, ptr dereferenceable(8) %p1, ptr dereferenceable(8) %p2) {
9 ; CHECK-LABEL: @test_phi_combine_load_metadata(
10 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[T:%.*]], label [[F:%.*]]
11 ; CHECK:       t:
12 ; CHECK-NEXT:    call void @bar()
13 ; CHECK-NEXT:    br label [[CONT:%.*]]
14 ; CHECK:       f:
15 ; CHECK-NEXT:    call void @baz()
16 ; CHECK-NEXT:    br label [[CONT]]
17 ; CHECK:       cont:
18 ; CHECK-NEXT:    [[RES_IN:%.*]] = phi ptr [ [[P1:%.*]], [[T]] ], [ [[P2:%.*]], [[F]] ]
19 ; CHECK-NEXT:    [[RES:%.*]] = load ptr, ptr [[RES_IN]], align 8, !noundef !0
20 ; CHECK-NEXT:    ret ptr [[RES]]
22   br i1 %c, label %t, label %f
24   call void @bar()
25   %v1 = load ptr, ptr %p1, align 8, !noundef !0
26   br label %cont
29   call void @baz()
30   %v2 = load ptr, ptr %p2, align 8, !noundef !0
31   br label %cont
33 cont:
34   %res = phi ptr [ %v1, %t ], [ %v2, %f ]
35   ret ptr %res
38 ; Check that !noundef metadata is not combined as a result of
39 ; there is a load don't have a noundef metadata.
40 define ptr @test_phi_combine_load_metadata_negative(i1 %c, ptr dereferenceable(8) %p1, ptr dereferenceable(8) %p2) {
41 ; CHECK-LABEL: @test_phi_combine_load_metadata_negative(
42 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[T:%.*]], label [[F:%.*]]
43 ; CHECK:       t:
44 ; CHECK-NEXT:    call void @bar()
45 ; CHECK-NEXT:    br label [[CONT:%.*]]
46 ; CHECK:       f:
47 ; CHECK-NEXT:    call void @baz()
48 ; CHECK-NEXT:    br label [[CONT]]
49 ; CHECK:       cont:
50 ; CHECK-NEXT:    [[RES_IN:%.*]] = phi ptr [ [[P1:%.*]], [[T]] ], [ [[P2:%.*]], [[F]] ]
51 ; CHECK-NEXT:    [[RES:%.*]] = load ptr, ptr [[RES_IN]], align 8
52 ; CHECK-NEXT:    ret ptr [[RES]]
54   br i1 %c, label %t, label %f
56   call void @bar()
57   %v1 = load ptr, ptr %p1, align 8, !noundef !0
58   br label %cont
61   call void @baz()
62   %v2 = load ptr, ptr %p2, align 8
63   br label %cont
65 cont:
66   %res = phi ptr [ %v1, %t ], [ %v2, %f ]
67   ret ptr %res
70 !0 = !{}