xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/2009-02-26-MachineLICMBug.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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