1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=g5 < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=g5 -addr-sink-using-gep=1 < %s | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker;; Formerly crashed, see PR 1508 4*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f128:64:128" 5*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-apple-darwin8" 6*9880d681SAndroid Build Coastguard Worker %struct.Range = type { i64, i64 } 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_startproc 9*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_personality 155, L___gxx_personality_v0$non_lazy_ptr 10*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_lsda 16, Lexception0 11*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_def_cfa_offset 176 12*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset r31, -8 13*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset lr, 16 14*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_def_cfa_register r31 15*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset r27, -16 16*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset r28, -24 17*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset r29, -32 18*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset r30, -40 19*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_endproc 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine void @Bork(i64 %range.0.0, i64 %range.0.1, i64 %size) personality i32 (...)* @__gxx_personality_v0 { 23*9880d681SAndroid Build Coastguard Workerentry: 24*9880d681SAndroid Build Coastguard Worker %effectiveRange = alloca %struct.Range, align 8 ; <%struct.Range*> [#uses=2] 25*9880d681SAndroid Build Coastguard Worker %tmp4 = call i8* @llvm.stacksave() ; <i8*> [#uses=1] 26*9880d681SAndroid Build Coastguard Worker %size1 = trunc i64 %size to i32 ; <i32> [#uses=1] 27*9880d681SAndroid Build Coastguard Worker %tmp17 = alloca i8*, i32 %size1 ; <i8**> [#uses=1] 28*9880d681SAndroid Build Coastguard Worker invoke void @Foo(i8** %tmp17) 29*9880d681SAndroid Build Coastguard Worker to label %bb30.preheader unwind label %unwind 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerbb30.preheader: ; preds = %entry 32*9880d681SAndroid Build Coastguard Worker %tmp26 = getelementptr %struct.Range, %struct.Range* %effectiveRange, i64 0, i32 1 ; <i64*> [#uses=1] 33*9880d681SAndroid Build Coastguard Worker br label %bb30 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerunwind: ; preds = %cond_true, %entry 36*9880d681SAndroid Build Coastguard Worker %exn = landingpad {i8*, i32} 37*9880d681SAndroid Build Coastguard Worker catch i8* null 38*9880d681SAndroid Build Coastguard Worker call void @llvm.stackrestore(i8* %tmp4) 39*9880d681SAndroid Build Coastguard Worker resume { i8*, i32 } %exn 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerinvcont23: ; preds = %cond_true 42*9880d681SAndroid Build Coastguard Worker %tmp27 = load i64, i64* %tmp26, align 8 ; <i64> [#uses=1] 43*9880d681SAndroid Build Coastguard Worker %tmp28 = sub i64 %range_addr.1.0, %tmp27 ; <i64> [#uses=1] 44*9880d681SAndroid Build Coastguard Worker br label %bb30 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerbb30: ; preds = %invcont23, %bb30.preheader 47*9880d681SAndroid Build Coastguard Worker %range_addr.1.0 = phi i64 [ %tmp28, %invcont23 ], [ %range.0.1, %bb30.preheader ] ; <i64> [#uses=2] 48*9880d681SAndroid Build Coastguard Worker %tmp33 = icmp eq i64 %range_addr.1.0, 0 ; <i1> [#uses=1] 49*9880d681SAndroid Build Coastguard Worker br i1 %tmp33, label %cleanup, label %cond_true 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workercond_true: ; preds = %bb30 52*9880d681SAndroid Build Coastguard Worker invoke void @Bar(i64 %range.0.0, %struct.Range* %effectiveRange) 53*9880d681SAndroid Build Coastguard Worker to label %invcont23 unwind label %unwind 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workercleanup: ; preds = %bb30 56*9880d681SAndroid Build Coastguard Worker ret void 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdeclare i8* @llvm.stacksave() nounwind 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdeclare void @Foo(i8**) 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdeclare void @Bar(i64, %struct.Range*) 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.stackrestore(i8*) nounwind 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdeclare i32 @__gxx_personality_v0(...) 68