107 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -p 'require<profile-summary>,codegenprepare' -cgpp-huge-func=0 < %s | FileCheck %s3 4target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"5target triple = "x86_64-grtev4-linux-gnu"6 7@globalptr = external global ptr8declare ptr @get_ptr(i64)9 10; Can't recreate invoke instruction11 12define void @addr_from_invoke() personality ptr null {13; CHECK-LABEL: define void @addr_from_invoke() personality ptr null {14; CHECK-NEXT: [[ENTRY:.*:]]15; CHECK-NEXT: [[PTR:%.*]] = invoke ptr @get_ptr(i64 0)16; CHECK-NEXT: to label %[[BODY_1:.*]] unwind label %[[EHCLEANUP:.*]]17; CHECK: [[EHCLEANUP]]:18; CHECK-NEXT: [[PAD:%.*]] = cleanuppad within none []19; CHECK-NEXT: cleanupret from [[PAD]] unwind to caller20; CHECK: [[BODY_1]]:21; CHECK-NEXT: [[GEP1:%.*]] = bitcast ptr [[PTR]] to ptr22; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr [[GEP1]], align 423; CHECK-NEXT: [[TMP0:%.*]] = bitcast ptr [[PTR]] to ptr24; CHECK-NEXT: [[UNUSED:%.*]] = load <4 x i32>, ptr [[TMP0]], align 425; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr [[TMP0]], align 426; CHECK-NEXT: ret void27;28entry:29 %ptr = invoke ptr @get_ptr(i64 0) to label %body.1 unwind label %ehcleanup30 31body.2:32 %unused = load <4 x i32>, ptr %gep, align 433 store <4 x i32> zeroinitializer, ptr %gep, align 434 ret void35 36ehcleanup:37 %pad = cleanuppad within none []38 cleanupret from %pad unwind to caller39 40body.1:41 %gep = getelementptr { i32 }, ptr %ptr, i64 0, i32 042 store <4 x i32> zeroinitializer, ptr %gep, align 443 br label %body.244}45 46define void @addr_from_arg(ptr %ptr, i1 %p) {47; CHECK-LABEL: define void @addr_from_arg(48; CHECK-SAME: ptr [[PTR:%.*]], i1 [[P:%.*]]) {49; CHECK-NEXT: [[ENTRY:.*:]]50; CHECK-NEXT: br i1 [[P]], label %[[BODY_1:.*]], label %[[EXIT:.*]]51; CHECK: [[EXIT]]:52; CHECK-NEXT: ret void53; CHECK: [[BODY_1]]:54; CHECK-NEXT: [[TMP0:%.*]] = bitcast ptr [[PTR]] to ptr55; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr [[TMP0]], align 456; CHECK-NEXT: [[UNUSED:%.*]] = load <4 x i32>, ptr [[PTR]], align 457; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr [[PTR]], align 458; CHECK-NEXT: ret void59;60entry:61 br i1 %p, label %body.1, label %exit62 63body.2:64 %unused = load <4 x i32>, ptr %gep, align 465 store <4 x i32> zeroinitializer, ptr %gep, align 466 ret void67 68exit:69 ret void70 71body.1:72 %gep = getelementptr { i32 }, ptr %ptr, i64 0, i32 073 store <4 x i32> zeroinitializer, ptr %gep, align 474 br label %body.275}76 77define void @addr_from_global(i1 %p) {78; CHECK-LABEL: define void @addr_from_global(79; CHECK-SAME: i1 [[P:%.*]]) {80; CHECK-NEXT: [[ENTRY:.*:]]81; CHECK-NEXT: br i1 [[P]], label %[[BODY_1:.*]], label %[[EXIT:.*]]82; CHECK: [[EXIT]]:83; CHECK-NEXT: ret void84; CHECK: [[BODY_1]]:85; CHECK-NEXT: [[GEP1:%.*]] = bitcast ptr @globalptr to ptr86; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr [[GEP1]], align 487; CHECK-NEXT: [[UNUSED:%.*]] = load <4 x i32>, ptr @globalptr, align 488; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr @globalptr, align 489; CHECK-NEXT: ret void90;91entry:92 br i1 %p, label %body.1, label %exit93 94body.2:95 %unused = load <4 x i32>, ptr %gep, align 496 store <4 x i32> zeroinitializer, ptr %gep, align 497 ret void98 99exit:100 ret void101 102body.1:103 %gep = getelementptr { i32 }, ptr @globalptr, i64 0, i32 0104 store <4 x i32> zeroinitializer, ptr %gep, align 4105 br label %body.2106}107