1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | grep abort | count 1 2*9880d681SAndroid Build Coastguard Worker; Calls to abort should all be merged 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; ModuleID = '5898899.c' 5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" 6*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-darwin8" 7*9880d681SAndroid Build Coastguard Worker %struct.BoundaryAlignment = type { [3 x i8], i8, i16, i16, i8, [2 x i8] } 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine void @passing2(i64 %str.0, i64 %str.1, i16 signext %s, i32 %j, i8 signext %c, i16 signext %t, i16 signext %u, i8 signext %d) nounwind optsize { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %str_addr = alloca %struct.BoundaryAlignment ; <%struct.BoundaryAlignment*> [#uses=7] 12*9880d681SAndroid Build Coastguard Worker %s_addr = alloca i16 ; <i16*> [#uses=1] 13*9880d681SAndroid Build Coastguard Worker %j_addr = alloca i32 ; <i32*> [#uses=2] 14*9880d681SAndroid Build Coastguard Worker %c_addr = alloca i8 ; <i8*> [#uses=2] 15*9880d681SAndroid Build Coastguard Worker %t_addr = alloca i16 ; <i16*> [#uses=2] 16*9880d681SAndroid Build Coastguard Worker %u_addr = alloca i16 ; <i16*> [#uses=2] 17*9880d681SAndroid Build Coastguard Worker %d_addr = alloca i8 ; <i8*> [#uses=2] 18*9880d681SAndroid Build Coastguard Worker %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0] 19*9880d681SAndroid Build Coastguard Worker %tmp = bitcast %struct.BoundaryAlignment* %str_addr to { i64, i64 }* ; <{ i64, i64 }*> [#uses=1] 20*9880d681SAndroid Build Coastguard Worker %tmp1 = getelementptr { i64, i64 }, { i64, i64 }* %tmp, i32 0, i32 0 ; <i64*> [#uses=1] 21*9880d681SAndroid Build Coastguard Worker store i64 %str.0, i64* %tmp1 22*9880d681SAndroid Build Coastguard Worker %tmp2 = bitcast %struct.BoundaryAlignment* %str_addr to { i64, i64 }* ; <{ i64, i64 }*> [#uses=1] 23*9880d681SAndroid Build Coastguard Worker %tmp3 = getelementptr { i64, i64 }, { i64, i64 }* %tmp2, i32 0, i32 1 ; <i64*> [#uses=1] 24*9880d681SAndroid Build Coastguard Worker %bc = bitcast i64* %tmp3 to i8* ; <i8*> [#uses=2] 25*9880d681SAndroid Build Coastguard Worker %byte = trunc i64 %str.1 to i8 ; <i8> [#uses=1] 26*9880d681SAndroid Build Coastguard Worker store i8 %byte, i8* %bc 27*9880d681SAndroid Build Coastguard Worker %shft = lshr i64 %str.1, 8 ; <i64> [#uses=2] 28*9880d681SAndroid Build Coastguard Worker %Loc = getelementptr i8, i8* %bc, i32 1 ; <i8*> [#uses=2] 29*9880d681SAndroid Build Coastguard Worker %byte4 = trunc i64 %shft to i8 ; <i8> [#uses=1] 30*9880d681SAndroid Build Coastguard Worker store i8 %byte4, i8* %Loc 31*9880d681SAndroid Build Coastguard Worker %shft5 = lshr i64 %shft, 8 ; <i64> [#uses=2] 32*9880d681SAndroid Build Coastguard Worker %Loc6 = getelementptr i8, i8* %Loc, i32 1 ; <i8*> [#uses=2] 33*9880d681SAndroid Build Coastguard Worker %byte7 = trunc i64 %shft5 to i8 ; <i8> [#uses=1] 34*9880d681SAndroid Build Coastguard Worker store i8 %byte7, i8* %Loc6 35*9880d681SAndroid Build Coastguard Worker %shft8 = lshr i64 %shft5, 8 ; <i64> [#uses=2] 36*9880d681SAndroid Build Coastguard Worker %Loc9 = getelementptr i8, i8* %Loc6, i32 1 ; <i8*> [#uses=2] 37*9880d681SAndroid Build Coastguard Worker %byte10 = trunc i64 %shft8 to i8 ; <i8> [#uses=1] 38*9880d681SAndroid Build Coastguard Worker store i8 %byte10, i8* %Loc9 39*9880d681SAndroid Build Coastguard Worker %shft11 = lshr i64 %shft8, 8 ; <i64> [#uses=0] 40*9880d681SAndroid Build Coastguard Worker %Loc12 = getelementptr i8, i8* %Loc9, i32 1 ; <i8*> [#uses=0] 41*9880d681SAndroid Build Coastguard Worker store i16 %s, i16* %s_addr 42*9880d681SAndroid Build Coastguard Worker store i32 %j, i32* %j_addr 43*9880d681SAndroid Build Coastguard Worker store i8 %c, i8* %c_addr 44*9880d681SAndroid Build Coastguard Worker store i16 %t, i16* %t_addr 45*9880d681SAndroid Build Coastguard Worker store i16 %u, i16* %u_addr 46*9880d681SAndroid Build Coastguard Worker store i8 %d, i8* %d_addr 47*9880d681SAndroid Build Coastguard Worker %tmp13 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 0 ; <[3 x i8]*> [#uses=1] 48*9880d681SAndroid Build Coastguard Worker %tmp1314 = bitcast [3 x i8]* %tmp13 to i32* ; <i32*> [#uses=1] 49*9880d681SAndroid Build Coastguard Worker %tmp15 = load i32, i32* %tmp1314, align 4 ; <i32> [#uses=1] 50*9880d681SAndroid Build Coastguard Worker %tmp16 = shl i32 %tmp15, 14 ; <i32> [#uses=1] 51*9880d681SAndroid Build Coastguard Worker %tmp17 = ashr i32 %tmp16, 23 ; <i32> [#uses=1] 52*9880d681SAndroid Build Coastguard Worker %tmp1718 = trunc i32 %tmp17 to i16 ; <i16> [#uses=1] 53*9880d681SAndroid Build Coastguard Worker %sextl = shl i16 %tmp1718, 7 ; <i16> [#uses=1] 54*9880d681SAndroid Build Coastguard Worker %sextr = ashr i16 %sextl, 7 ; <i16> [#uses=2] 55*9880d681SAndroid Build Coastguard Worker %sextl19 = shl i16 %sextr, 7 ; <i16> [#uses=1] 56*9880d681SAndroid Build Coastguard Worker %sextr20 = ashr i16 %sextl19, 7 ; <i16> [#uses=0] 57*9880d681SAndroid Build Coastguard Worker %sextl21 = shl i16 %sextr, 7 ; <i16> [#uses=1] 58*9880d681SAndroid Build Coastguard Worker %sextr22 = ashr i16 %sextl21, 7 ; <i16> [#uses=1] 59*9880d681SAndroid Build Coastguard Worker %sextr2223 = sext i16 %sextr22 to i32 ; <i32> [#uses=1] 60*9880d681SAndroid Build Coastguard Worker %tmp24 = load i32, i32* %j_addr, align 4 ; <i32> [#uses=1] 61*9880d681SAndroid Build Coastguard Worker %tmp25 = icmp ne i32 %sextr2223, %tmp24 ; <i1> [#uses=1] 62*9880d681SAndroid Build Coastguard Worker %tmp2526 = zext i1 %tmp25 to i8 ; <i8> [#uses=1] 63*9880d681SAndroid Build Coastguard Worker %toBool = icmp ne i8 %tmp2526, 0 ; <i1> [#uses=1] 64*9880d681SAndroid Build Coastguard Worker br i1 %toBool, label %bb, label %bb27 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerbb: ; preds = %entry 67*9880d681SAndroid Build Coastguard Worker call void (...) @abort( ) noreturn nounwind 68*9880d681SAndroid Build Coastguard Worker unreachable 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerbb27: ; preds = %entry 71*9880d681SAndroid Build Coastguard Worker %tmp28 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 1 ; <i8*> [#uses=1] 72*9880d681SAndroid Build Coastguard Worker %tmp29 = load i8, i8* %tmp28, align 4 ; <i8> [#uses=1] 73*9880d681SAndroid Build Coastguard Worker %tmp30 = load i8, i8* %c_addr, align 1 ; <i8> [#uses=1] 74*9880d681SAndroid Build Coastguard Worker %tmp31 = icmp ne i8 %tmp29, %tmp30 ; <i1> [#uses=1] 75*9880d681SAndroid Build Coastguard Worker %tmp3132 = zext i1 %tmp31 to i8 ; <i8> [#uses=1] 76*9880d681SAndroid Build Coastguard Worker %toBool33 = icmp ne i8 %tmp3132, 0 ; <i1> [#uses=1] 77*9880d681SAndroid Build Coastguard Worker br i1 %toBool33, label %bb34, label %bb35 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerbb34: ; preds = %bb27 80*9880d681SAndroid Build Coastguard Worker call void (...) @abort( ) noreturn nounwind 81*9880d681SAndroid Build Coastguard Worker unreachable 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Workerbb35: ; preds = %bb27 84*9880d681SAndroid Build Coastguard Worker %tmp36 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 2 ; <i16*> [#uses=1] 85*9880d681SAndroid Build Coastguard Worker %tmp37 = load i16, i16* %tmp36, align 4 ; <i16> [#uses=1] 86*9880d681SAndroid Build Coastguard Worker %tmp38 = shl i16 %tmp37, 7 ; <i16> [#uses=1] 87*9880d681SAndroid Build Coastguard Worker %tmp39 = ashr i16 %tmp38, 7 ; <i16> [#uses=1] 88*9880d681SAndroid Build Coastguard Worker %sextl40 = shl i16 %tmp39, 7 ; <i16> [#uses=1] 89*9880d681SAndroid Build Coastguard Worker %sextr41 = ashr i16 %sextl40, 7 ; <i16> [#uses=2] 90*9880d681SAndroid Build Coastguard Worker %sextl42 = shl i16 %sextr41, 7 ; <i16> [#uses=1] 91*9880d681SAndroid Build Coastguard Worker %sextr43 = ashr i16 %sextl42, 7 ; <i16> [#uses=0] 92*9880d681SAndroid Build Coastguard Worker %sextl44 = shl i16 %sextr41, 7 ; <i16> [#uses=1] 93*9880d681SAndroid Build Coastguard Worker %sextr45 = ashr i16 %sextl44, 7 ; <i16> [#uses=1] 94*9880d681SAndroid Build Coastguard Worker %tmp46 = load i16, i16* %t_addr, align 2 ; <i16> [#uses=1] 95*9880d681SAndroid Build Coastguard Worker %tmp47 = icmp ne i16 %sextr45, %tmp46 ; <i1> [#uses=1] 96*9880d681SAndroid Build Coastguard Worker %tmp4748 = zext i1 %tmp47 to i8 ; <i8> [#uses=1] 97*9880d681SAndroid Build Coastguard Worker %toBool49 = icmp ne i8 %tmp4748, 0 ; <i1> [#uses=1] 98*9880d681SAndroid Build Coastguard Worker br i1 %toBool49, label %bb50, label %bb51 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerbb50: ; preds = %bb35 101*9880d681SAndroid Build Coastguard Worker call void (...) @abort( ) noreturn nounwind 102*9880d681SAndroid Build Coastguard Worker unreachable 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerbb51: ; preds = %bb35 105*9880d681SAndroid Build Coastguard Worker %tmp52 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 3 ; <i16*> [#uses=1] 106*9880d681SAndroid Build Coastguard Worker %tmp53 = load i16, i16* %tmp52, align 4 ; <i16> [#uses=1] 107*9880d681SAndroid Build Coastguard Worker %tmp54 = shl i16 %tmp53, 7 ; <i16> [#uses=1] 108*9880d681SAndroid Build Coastguard Worker %tmp55 = ashr i16 %tmp54, 7 ; <i16> [#uses=1] 109*9880d681SAndroid Build Coastguard Worker %sextl56 = shl i16 %tmp55, 7 ; <i16> [#uses=1] 110*9880d681SAndroid Build Coastguard Worker %sextr57 = ashr i16 %sextl56, 7 ; <i16> [#uses=2] 111*9880d681SAndroid Build Coastguard Worker %sextl58 = shl i16 %sextr57, 7 ; <i16> [#uses=1] 112*9880d681SAndroid Build Coastguard Worker %sextr59 = ashr i16 %sextl58, 7 ; <i16> [#uses=0] 113*9880d681SAndroid Build Coastguard Worker %sextl60 = shl i16 %sextr57, 7 ; <i16> [#uses=1] 114*9880d681SAndroid Build Coastguard Worker %sextr61 = ashr i16 %sextl60, 7 ; <i16> [#uses=1] 115*9880d681SAndroid Build Coastguard Worker %tmp62 = load i16, i16* %u_addr, align 2 ; <i16> [#uses=1] 116*9880d681SAndroid Build Coastguard Worker %tmp63 = icmp ne i16 %sextr61, %tmp62 ; <i1> [#uses=1] 117*9880d681SAndroid Build Coastguard Worker %tmp6364 = zext i1 %tmp63 to i8 ; <i8> [#uses=1] 118*9880d681SAndroid Build Coastguard Worker %toBool65 = icmp ne i8 %tmp6364, 0 ; <i1> [#uses=1] 119*9880d681SAndroid Build Coastguard Worker br i1 %toBool65, label %bb66, label %bb67 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerbb66: ; preds = %bb51 122*9880d681SAndroid Build Coastguard Worker call void (...) @abort( ) noreturn nounwind 123*9880d681SAndroid Build Coastguard Worker unreachable 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerbb67: ; preds = %bb51 126*9880d681SAndroid Build Coastguard Worker %tmp68 = getelementptr %struct.BoundaryAlignment, %struct.BoundaryAlignment* %str_addr, i32 0, i32 4 ; <i8*> [#uses=1] 127*9880d681SAndroid Build Coastguard Worker %tmp69 = load i8, i8* %tmp68, align 4 ; <i8> [#uses=1] 128*9880d681SAndroid Build Coastguard Worker %tmp70 = load i8, i8* %d_addr, align 1 ; <i8> [#uses=1] 129*9880d681SAndroid Build Coastguard Worker %tmp71 = icmp ne i8 %tmp69, %tmp70 ; <i1> [#uses=1] 130*9880d681SAndroid Build Coastguard Worker %tmp7172 = zext i1 %tmp71 to i8 ; <i8> [#uses=1] 131*9880d681SAndroid Build Coastguard Worker %toBool73 = icmp ne i8 %tmp7172, 0 ; <i1> [#uses=1] 132*9880d681SAndroid Build Coastguard Worker br i1 %toBool73, label %bb74, label %bb75 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerbb74: ; preds = %bb67 135*9880d681SAndroid Build Coastguard Worker call void (...) @abort( ) noreturn nounwind 136*9880d681SAndroid Build Coastguard Worker unreachable 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerbb75: ; preds = %bb67 139*9880d681SAndroid Build Coastguard Worker br label %return 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerreturn: ; preds = %bb75 142*9880d681SAndroid Build Coastguard Worker ret void 143*9880d681SAndroid Build Coastguard Worker} 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Workerdeclare void @abort(...) noreturn nounwind 146