71 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=instcombine -S < %s | FileCheck %s3 4declare void @bar()5declare void @baz()6 7; Check that !noundef metadata is combined8define 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 !020; CHECK-NEXT: ret ptr [[RES]]21;22 br i1 %c, label %t, label %f23t:24 call void @bar()25 %v1 = load ptr, ptr %p1, align 8, !noundef !026 br label %cont27 28f:29 call void @baz()30 %v2 = load ptr, ptr %p2, align 8, !noundef !031 br label %cont32 33cont:34 %res = phi ptr [ %v1, %t ], [ %v2, %f ]35 ret ptr %res36}37 38; Check that !noundef metadata is not combined as a result of39; there is a load don't have a noundef metadata.40define 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 852; CHECK-NEXT: ret ptr [[RES]]53;54 br i1 %c, label %t, label %f55t:56 call void @bar()57 %v1 = load ptr, ptr %p1, align 8, !noundef !058 br label %cont59 60f:61 call void @baz()62 %v2 = load ptr, ptr %p2, align 863 br label %cont64 65cont:66 %res = phi ptr [ %v1, %t ], [ %v2, %f ]67 ret ptr %res68}69 70!0 = !{}71