1*9880d681SAndroid Build Coastguard Worker; REQUIRES: asserts 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mattr=+sse3,+sse4.1 -mcpu=penryn -stats 2>&1 | grep "9 machine-licm" 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mattr=+sse3,+sse4.1 -mcpu=penryn | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker; rdar://6627786 5*9880d681SAndroid Build Coastguard Worker; rdar://7792037 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-darwin10.0" 8*9880d681SAndroid Build Coastguard Worker %struct.Key = type { i64 } 9*9880d681SAndroid Build Coastguard Worker %struct.__Rec = type opaque 10*9880d681SAndroid Build Coastguard Worker %struct.__vv = type { } 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine %struct.__vv* @t(%struct.Key* %desc, i64 %p) nounwind ssp { 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker br label %bb4 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerbb4: ; preds = %bb.i, %bb26, %bb4, %entry 17*9880d681SAndroid Build Coastguard Worker; CHECK: %bb4 18*9880d681SAndroid Build Coastguard Worker; CHECK: xorl 19*9880d681SAndroid Build Coastguard Worker; CHECK: callq 20*9880d681SAndroid Build Coastguard Worker; CHECK: xorl 21*9880d681SAndroid Build Coastguard Worker; CHECK: xorl 22*9880d681SAndroid Build Coastguard Worker; CHECK: movq 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker %0 = call i32 (...) @xxGetOffsetForCode(i32 undef) nounwind ; <i32> [#uses=0] 25*9880d681SAndroid Build Coastguard Worker %ins = or i64 %p, 2097152 ; <i64> [#uses=1] 26*9880d681SAndroid Build Coastguard Worker %1 = call i32 (...) @xxCalculateMidType(%struct.Key* %desc, i32 0) nounwind ; <i32> [#uses=1] 27*9880d681SAndroid Build Coastguard Worker %cond = icmp eq i32 %1, 1 ; <i1> [#uses=1] 28*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %bb26, label %bb4 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerbb26: ; preds = %bb4 31*9880d681SAndroid Build Coastguard Worker %2 = and i64 %ins, 15728640 ; <i64> [#uses=1] 32*9880d681SAndroid Build Coastguard Worker %cond.i = icmp eq i64 %2, 1048576 ; <i1> [#uses=1] 33*9880d681SAndroid Build Coastguard Worker br i1 %cond.i, label %bb.i, label %bb4 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerbb.i: ; preds = %bb26 36*9880d681SAndroid Build Coastguard Worker %3 = load i32, i32* null, align 4 ; <i32> [#uses=1] 37*9880d681SAndroid Build Coastguard Worker %4 = uitofp i32 %3 to float ; <float> [#uses=1] 38*9880d681SAndroid Build Coastguard Worker %.sum13.i = add i64 0, 4 ; <i64> [#uses=1] 39*9880d681SAndroid Build Coastguard Worker %5 = getelementptr i8, i8* null, i64 %.sum13.i ; <i8*> [#uses=1] 40*9880d681SAndroid Build Coastguard Worker %6 = bitcast i8* %5 to i32* ; <i32*> [#uses=1] 41*9880d681SAndroid Build Coastguard Worker %7 = load i32, i32* %6, align 4 ; <i32> [#uses=1] 42*9880d681SAndroid Build Coastguard Worker %8 = uitofp i32 %7 to float ; <float> [#uses=1] 43*9880d681SAndroid Build Coastguard Worker %.sum.i = add i64 0, 8 ; <i64> [#uses=1] 44*9880d681SAndroid Build Coastguard Worker %9 = getelementptr i8, i8* null, i64 %.sum.i ; <i8*> [#uses=1] 45*9880d681SAndroid Build Coastguard Worker %10 = bitcast i8* %9 to i32* ; <i32*> [#uses=1] 46*9880d681SAndroid Build Coastguard Worker %11 = load i32, i32* %10, align 4 ; <i32> [#uses=1] 47*9880d681SAndroid Build Coastguard Worker %12 = uitofp i32 %11 to float ; <float> [#uses=1] 48*9880d681SAndroid Build Coastguard Worker %13 = insertelement <4 x float> undef, float %4, i32 0 ; <<4 x float>> [#uses=1] 49*9880d681SAndroid Build Coastguard Worker %14 = insertelement <4 x float> %13, float %8, i32 1 ; <<4 x float>> [#uses=1] 50*9880d681SAndroid Build Coastguard Worker %15 = insertelement <4 x float> %14, float %12, i32 2 ; <<4 x float>> [#uses=1] 51*9880d681SAndroid Build Coastguard Worker store <4 x float> %15, <4 x float>* null, align 16 52*9880d681SAndroid Build Coastguard Worker br label %bb4 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdeclare i32 @xxGetOffsetForCode(...) 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerdeclare i32 @xxCalculateMidType(...) 58