xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/2012-09-28-CGPBug.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=i386-apple-macosx < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; rdar://12396696
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker@JT = global [4 x i32] [i32 sub (i32 ptrtoint (i8* blockaddress(@h, %18) to i32), i32 ptrtoint (i8* blockaddress(@h, %11) to i32)), i32 sub (i32 ptrtoint (i8* blockaddress(@h, %17) to i32), i32 ptrtoint (i8* blockaddress(@h, %11) to i32)), i32 sub (i32 ptrtoint (i8* blockaddress(@h, %22) to i32), i32 ptrtoint (i8* blockaddress(@h, %18) to i32)), i32 sub (i32 ptrtoint (i8* blockaddress(@h, %22) to i32), i32 ptrtoint (i8* blockaddress(@h, %17) to i32))]
5*9880d681SAndroid Build Coastguard Worker@gGlobalLock = external global i8*
6*9880d681SAndroid Build Coastguard Worker@.str40 = external global [35 x i8]
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; CHECK: _JT:
9*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .long Ltmp{{[0-9]+}}-1
10*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .long 1-Ltmp{{[0-9]+}}
11*9880d681SAndroid Build Coastguard Worker; CHECK: .long Ltmp{{[0-9]+}}-Ltmp{{[0-9]+}}
12*9880d681SAndroid Build Coastguard Worker; CHECK: .long Ltmp{{[0-9]+}}-Ltmp{{[0-9]+}}
13*9880d681SAndroid Build Coastguard Worker; CHECK: .long Ltmp{{[0-9]+}}-Ltmp{{[0-9]+}}
14*9880d681SAndroid Build Coastguard Worker; CHECK: .long Ltmp{{[0-9]+}}-Ltmp{{[0-9]+}}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdefine void @h(i8*) nounwind ssp {
17*9880d681SAndroid Build Coastguard Worker  %2 = alloca i8*
18*9880d681SAndroid Build Coastguard Worker  store i8* %0, i8** %2
19*9880d681SAndroid Build Coastguard Worker  %3 = load i8*, i8** %2
20*9880d681SAndroid Build Coastguard Worker  %4 = bitcast i8* %3 to { i32, i32 }*
21*9880d681SAndroid Build Coastguard Worker  %5 = getelementptr { i32, i32 }, { i32, i32 }* %4, i32 0, i32 0
22*9880d681SAndroid Build Coastguard Worker  %6 = load i32, i32* %5
23*9880d681SAndroid Build Coastguard Worker  %7 = srem i32 %6, 2
24*9880d681SAndroid Build Coastguard Worker  %8 = icmp slt i32 %6, 2
25*9880d681SAndroid Build Coastguard Worker  %9 = select i1 %8, i32 %6, i32 %7
26*9880d681SAndroid Build Coastguard Worker  %10 = icmp eq i32 %9, 0
27*9880d681SAndroid Build Coastguard Worker  br label %11
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; <label>:11                                      ; preds = %1
30*9880d681SAndroid Build Coastguard Worker  %12 = zext i1 %10 to i32
31*9880d681SAndroid Build Coastguard Worker  %13 = getelementptr [4 x i32], [4 x i32]* @JT, i32 0, i32 %12
32*9880d681SAndroid Build Coastguard Worker  %14 = load i32, i32* %13
33*9880d681SAndroid Build Coastguard Worker  %15 = add i32 %14, ptrtoint (i8* blockaddress(@h, %11) to i32)
34*9880d681SAndroid Build Coastguard Worker  %16 = inttoptr i32 %15 to i8*
35*9880d681SAndroid Build Coastguard Worker  indirectbr i8* %16, [label %17, label %18]
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; <label>:17                                      ; preds = %11
38*9880d681SAndroid Build Coastguard Worker  tail call void (i8*, ...) @g(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str40, i32 0, i32 0))
39*9880d681SAndroid Build Coastguard Worker  br label %22
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; <label>:18                                      ; preds = %11
42*9880d681SAndroid Build Coastguard Worker  %19 = call i32 @f(i32 -1037694186) nounwind
43*9880d681SAndroid Build Coastguard Worker  %20 = inttoptr i32 %19 to i32 (i8**)*
44*9880d681SAndroid Build Coastguard Worker  %21 = tail call i32 %20(i8** @gGlobalLock)
45*9880d681SAndroid Build Coastguard Worker  br label %22
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; <label>:22                                      ; preds = %18, %17
48*9880d681SAndroid Build Coastguard Worker  ret void
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdeclare i32 @f(i32)
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdeclare void @g(i8*, ...)
54