1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=ppc32 < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; ModuleID = '<stdin>' 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-p:32:32:32-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" 4*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc-apple-darwin9.6" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i64 @foo(i64 %r.0.ph, i64 %q.0.ph, i32 %sr1.1.ph) nounwind { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo: 9*9880d681SAndroid Build Coastguard Worker; CHECK: subfc 10*9880d681SAndroid Build Coastguard Worker; CHECK: subfe 11*9880d681SAndroid Build Coastguard Worker; CHECK: subfc 12*9880d681SAndroid Build Coastguard Worker; CHECK: subfe 13*9880d681SAndroid Build Coastguard Worker %tmp0 = add i64 %r.0.ph, -1 ; <i64> [#uses=1] 14*9880d681SAndroid Build Coastguard Worker br label %bb40 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerbb40: ; preds = %bb40, %entry 17*9880d681SAndroid Build Coastguard Worker %indvar = phi i32 [ 0, %entry ], [ %indvar.next, %bb40 ] ; <i32> [#uses=1] 18*9880d681SAndroid Build Coastguard Worker %carry.0274 = phi i32 [ 0, %entry ], [%tmp122, %bb40 ] ; <i32> [#uses=1] 19*9880d681SAndroid Build Coastguard Worker %r.0273 = phi i64 [ %r.0.ph, %entry ], [ %tmp124, %bb40 ] ; <i64> [#uses=2] 20*9880d681SAndroid Build Coastguard Worker %q.0272 = phi i64 [ %q.0.ph, %entry ], [ %ins169, %bb40 ] ; <i64> [#uses=3] 21*9880d681SAndroid Build Coastguard Worker %tmp1 = lshr i64 %r.0273, 31 ; <i64> [#uses=1] 22*9880d681SAndroid Build Coastguard Worker %tmp2 = trunc i64 %tmp1 to i32 ; <i32> [#uses=1] 23*9880d681SAndroid Build Coastguard Worker %tmp3 = and i32 %tmp2, -2 ; <i32> [#uses=1] 24*9880d681SAndroid Build Coastguard Worker %tmp213 = trunc i64 %r.0273 to i32 ; <i32> [#uses=2] 25*9880d681SAndroid Build Coastguard Worker %tmp106 = lshr i32 %tmp213, 31 ; <i32> [#uses=1] 26*9880d681SAndroid Build Coastguard Worker %tmp107 = or i32 %tmp3, %tmp106 ; <i32> [#uses=1] 27*9880d681SAndroid Build Coastguard Worker %tmp215 = zext i32 %tmp107 to i64 ; <i64> [#uses=1] 28*9880d681SAndroid Build Coastguard Worker %tmp216 = shl i64 %tmp215, 32 ; <i64> [#uses=1] 29*9880d681SAndroid Build Coastguard Worker %tmp108 = shl i32 %tmp213, 1 ; <i32> [#uses=1] 30*9880d681SAndroid Build Coastguard Worker %tmp109 = lshr i64 %q.0272, 63 ; <i64> [#uses=1] 31*9880d681SAndroid Build Coastguard Worker %tmp110 = trunc i64 %tmp109 to i32 ; <i32> [#uses=1] 32*9880d681SAndroid Build Coastguard Worker %tmp111 = or i32 %tmp108, %tmp110 ; <i32> [#uses=1] 33*9880d681SAndroid Build Coastguard Worker %tmp222 = zext i32 %tmp111 to i64 ; <i64> [#uses=1] 34*9880d681SAndroid Build Coastguard Worker %ins224 = or i64 %tmp216, %tmp222 ; <i64> [#uses=2] 35*9880d681SAndroid Build Coastguard Worker %tmp112 = lshr i64 %q.0272, 31 ; <i64> [#uses=1] 36*9880d681SAndroid Build Coastguard Worker %tmp113 = trunc i64 %tmp112 to i32 ; <i32> [#uses=1] 37*9880d681SAndroid Build Coastguard Worker %tmp114 = and i32 %tmp113, -2 ; <i32> [#uses=1] 38*9880d681SAndroid Build Coastguard Worker %tmp158 = trunc i64 %q.0272 to i32 ; <i32> [#uses=2] 39*9880d681SAndroid Build Coastguard Worker %tmp115 = lshr i32 %tmp158, 31 ; <i32> [#uses=1] 40*9880d681SAndroid Build Coastguard Worker %tmp116 = or i32 %tmp114, %tmp115 ; <i32> [#uses=1] 41*9880d681SAndroid Build Coastguard Worker %tmp160 = zext i32 %tmp116 to i64 ; <i64> [#uses=1] 42*9880d681SAndroid Build Coastguard Worker %tmp161 = shl i64 %tmp160, 32 ; <i64> [#uses=1] 43*9880d681SAndroid Build Coastguard Worker %tmp117 = shl i32 %tmp158, 1 ; <i32> [#uses=1] 44*9880d681SAndroid Build Coastguard Worker %tmp118 = or i32 %tmp117, %carry.0274 ; <i32> [#uses=1] 45*9880d681SAndroid Build Coastguard Worker %tmp167 = zext i32 %tmp118 to i64 ; <i64> [#uses=1] 46*9880d681SAndroid Build Coastguard Worker %ins169 = or i64 %tmp161, %tmp167 ; <i64> [#uses=2] 47*9880d681SAndroid Build Coastguard Worker %tmp119 = sub i64 %tmp0, %ins224 ; <i64> [#uses=1] 48*9880d681SAndroid Build Coastguard Worker %tmp120 = ashr i64 %tmp119, 63 ; <i64> [#uses=2] 49*9880d681SAndroid Build Coastguard Worker %tmp121 = trunc i64 %tmp120 to i32 ; <i32> [#uses=1] 50*9880d681SAndroid Build Coastguard Worker %tmp122 = and i32 %tmp121, 1 ; <i32> [#uses=2] 51*9880d681SAndroid Build Coastguard Worker %tmp123 = and i64 %tmp120, %q.0.ph ; <i64> [#uses=1] 52*9880d681SAndroid Build Coastguard Worker %tmp124 = sub i64 %ins224, %tmp123 ; <i64> [#uses=2] 53*9880d681SAndroid Build Coastguard Worker %indvar.next = add i32 %indvar, 1 ; <i32> [#uses=2] 54*9880d681SAndroid Build Coastguard Worker %exitcond = icmp eq i32 %indvar.next, %sr1.1.ph ; <i1> [#uses=1] 55*9880d681SAndroid Build Coastguard Worker br i1 %exitcond, label %bb41.bb42_crit_edge, label %bb40 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerbb41.bb42_crit_edge: ; preds = %bb40 58*9880d681SAndroid Build Coastguard Worker %phitmp278 = zext i32 %tmp122 to i64 ; <i64> [#uses=1] 59*9880d681SAndroid Build Coastguard Worker %tmp125 = shl i64 %ins169, 1 ; <i64> [#uses=1] 60*9880d681SAndroid Build Coastguard Worker %tmp126 = or i64 %phitmp278, %tmp125 ; <i64> [#uses=2] 61*9880d681SAndroid Build Coastguard Worker ret i64 %tmp126 62*9880d681SAndroid Build Coastguard Worker} 63