64 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature2; RUN: opt < %s -passes='require<globals-aa>,gvn' -S | FileCheck %s3 4; Ensure we do not hoist the load over the call.5 6@G1 = internal global i32 17@G2 = internal global i32 18 9define i32 @direct_intrinsic(i1 %c) {10; CHECK-LABEL: define {{[^@]+}}@direct_intrinsic11; CHECK-SAME: (i1 [[C:%.*]]) {12; CHECK-NEXT: br i1 [[C]], label [[INIT:%.*]], label [[CHECK:%.*]]13; CHECK: init:14; CHECK-NEXT: store i32 0, ptr @G1, align 415; CHECK-NEXT: br label [[CHECK]]16; CHECK: check:17; CHECK-NEXT: call void @llvm.unknown()18; CHECK-NEXT: [[V:%.*]] = load i32, ptr @G1, align 419; CHECK-NEXT: ret i32 [[V]]20;21 br i1 %c, label %init, label %check22init:23 store i32 0, ptr @G124 br label %check25check:26 call void @llvm.unknown()27 %v = load i32, ptr @G128 ret i32 %v29}30 31define i32 @indirect_intrinsic(i1 %c) {32; CHECK-LABEL: define {{[^@]+}}@indirect_intrinsic33; CHECK-SAME: (i1 [[C:%.*]]) {34; CHECK-NEXT: br i1 [[C]], label [[INIT:%.*]], label [[CHECK:%.*]]35; CHECK: init:36; CHECK-NEXT: store i32 0, ptr @G2, align 437; CHECK-NEXT: br label [[CHECK]]38; CHECK: check:39; CHECK-NEXT: call void @intrinsic_caller()40; CHECK-NEXT: [[V:%.*]] = load i32, ptr @G2, align 441; CHECK-NEXT: ret i32 [[V]]42;43 br i1 %c, label %init, label %check44init:45 store i32 0, ptr @G246 br label %check47check:48 call void @intrinsic_caller()49 %v = load i32, ptr @G250 ret i32 %v51}52 53define fastcc void @intrinsic_caller() {54; CHECK-LABEL: define {{[^@]+}}@intrinsic_caller() {55; CHECK-NEXT: call void @llvm.unknown()56; CHECK-NEXT: ret void57;58 call void @llvm.unknown()59 ret void60}61 62declare void @llvm.unknown()63 64