brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 02f5774 Raw
79 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt < %s -passes=inline -S | FileCheck %s3; RUN: opt < %s -passes='cgscc(inline)' -S | FileCheck %s4 5%struct.a = type { i32, i32, i32, i32, i32 }6 7@g_var = global %struct.a { i32 1, i32 0, i32 0, i32 0, i32 0 }, align 88@other_g_var = global %struct.a zeroinitializer, align 49 10define void @callee(ptr noundef byval(%struct.a) align 8 %ptr) {11; CHECK-LABEL: define void @callee(12; CHECK-SAME: ptr noundef byval([[STRUCT_A:%.*]]) align 8 [[PTR:%.*]]) {13; CHECK-NEXT:  entry:14; CHECK-NEXT:    [[VAL:%.*]] = load i32, ptr [[PTR]], align 815; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp eq i32 [[VAL]], 016; CHECK-NEXT:    br i1 [[DOTNOT]], label [[CHECK_POINTERS_ARE_EQUAL:%.*]], label [[STORE_PTR_IN_GVAR:%.*]]17; CHECK:       store_ptr_in_gvar:18; CHECK-NEXT:    store ptr [[PTR]], ptr @other_g_var, align 819; CHECK-NEXT:    br label [[CHECK_POINTERS_ARE_EQUAL]]20; CHECK:       check_pointers_are_equal:21; CHECK-NEXT:    [[PHI:%.*]] = phi ptr [ [[PTR]], [[STORE_PTR_IN_GVAR]] ], [ @other_g_var, [[ENTRY:%.*]] ]22; CHECK-NEXT:    [[DOTNOT1:%.*]] = icmp eq ptr [[PHI]], [[PTR]]23; CHECK-NEXT:    br i1 [[DOTNOT1]], label [[RETURN:%.*]], label [[ABORT:%.*]]24; CHECK:       abort:25; CHECK-NEXT:    call void @abort()26; CHECK-NEXT:    unreachable27; CHECK:       return:28; CHECK-NEXT:    ret void29;30entry:31  %val = load i32, ptr %ptr, align 832  %.not = icmp eq i32 %val, 033  br i1 %.not, label %check_pointers_are_equal, label %store_ptr_in_gvar34 35store_ptr_in_gvar:                                ; preds = %entry36  store ptr %ptr, ptr @other_g_var, align 837  br label %check_pointers_are_equal38 39check_pointers_are_equal:                         ; preds = %store_ptr_in_gvar, %entry40  %phi = phi ptr [ %ptr, %store_ptr_in_gvar ], [ @other_g_var, %entry ]41  %.not1 = icmp eq ptr %phi, %ptr42  br i1 %.not1, label %return, label %abort43 44abort:                                            ; preds = %check_pointers_are_equal45  call void @abort()46  unreachable47 48return:                                           ; preds = %check_pointers_are_equal49  ret void50}51 52define i32 @main() {53; CHECK-LABEL: define i32 @main() {54; CHECK-NEXT:    [[G_VAR:%.*]] = alloca [[STRUCT_A:%.*]], align 855; CHECK-NEXT:    call void @llvm.lifetime.start.p0(ptr [[G_VAR]])56; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[G_VAR]], ptr align 8 @g_var, i64 20, i1 false)57; CHECK-NEXT:    [[VAL_I:%.*]] = load i32, ptr [[G_VAR]], align 858; CHECK-NEXT:    [[DOTNOT_I:%.*]] = icmp eq i32 [[VAL_I]], 059; CHECK-NEXT:    br i1 [[DOTNOT_I]], label [[CHECK_POINTERS_ARE_EQUAL_I:%.*]], label [[STORE_PTR_IN_GVAR_I:%.*]]60; CHECK:       store_ptr_in_gvar.i:61; CHECK-NEXT:    store ptr [[G_VAR]], ptr @other_g_var, align 862; CHECK-NEXT:    br label [[CHECK_POINTERS_ARE_EQUAL_I]]63; CHECK:       check_pointers_are_equal.i:64; CHECK-NEXT:    [[PHI_I:%.*]] = phi ptr [ [[G_VAR]], [[STORE_PTR_IN_GVAR_I]] ], [ @other_g_var, [[TMP0:%.*]] ]65; CHECK-NEXT:    [[DOTNOT1_I:%.*]] = icmp eq ptr [[PHI_I]], [[G_VAR]]66; CHECK-NEXT:    br i1 [[DOTNOT1_I]], label [[CALLEE_EXIT:%.*]], label [[ABORT_I:%.*]]67; CHECK:       abort.i:68; CHECK-NEXT:    call void @abort()69; CHECK-NEXT:    unreachable70; CHECK:       callee.exit:71; CHECK-NEXT:    call void @llvm.lifetime.end.p0(ptr [[G_VAR]])72; CHECK-NEXT:    ret i32 073;74  call void @callee(ptr noundef byval(%struct.a) align 8 @g_var)75  ret i32 076}77 78declare void @abort()79