ARM: allow constpool entry to be moved to the user's block in all cases.

Normally entries can only move to a lower address, but when that wasn't viable,
the user's block was considered anyway. Unfortunately, it went via
createNewWater which wasn't designed to handle the case where there's already
an island after the block.

Unfortunately, the test we have is slow and fragile, and I couldn't reduce it
to anything sane even with the @llvm.arm.space intrinsic. The test change here
is recreating the previous one after the change.

rdar://problem/18545506

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221905 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Tim Northover 2014-11-13 17:58:53 +00:00
parent 064da63fcb
commit 8bca5de6a9
2 changed files with 26 additions and 384 deletions

View File

@ -1207,7 +1207,8 @@ bool ARMConstantIslands::findAvailableWater(CPUser &U, unsigned UserOffset,
unsigned Growth;
if (isWaterInRange(UserOffset, WaterBB, U, Growth) &&
(WaterBB->getNumber() < U.HighWaterMark->getNumber() ||
NewWaterList.count(WaterBB)) && Growth < BestGrowth) {
NewWaterList.count(WaterBB) || WaterBB == U.MI->getParent()) &&
Growth < BestGrowth) {
// This is the least amount of required padding seen so far.
BestGrowth = Growth;
WaterIter = IP;
@ -1361,6 +1362,11 @@ void ARMConstantIslands::createNewWater(unsigned CPUserIndex,
if (CC != ARMCC::AL)
MI = LastIT;
}
// We really must not split an IT block.
DEBUG(unsigned PredReg;
assert(!isThumb || getITInstrPredicate(MI, PredReg) == ARMCC::AL));
NewMBB = splitBlockBeforeInstr(MI);
}

View File

@ -1,395 +1,31 @@
; RUN: llc < %s -mtriple=thumbv7-apple-ios7.1.0 -mcpu=cortex-a8 | FileCheck %s
@global = private unnamed_addr constant [16 x float] [float 1.500000e+00, float 2.500000e+00, float 4.000000e+00, float 6.000000e+00, float 1.000000e+01, float 1.600000e+01, float 2.500000e+01, float 3.500000e+01, float 5.000000e+01, float 7.000000e+01, float 9.500000e+01, float 1.200000e+02, float 1.500000e+02, float 1.850000e+02, float 2.400000e+02, float 3.000000e+02], align 4
; RUN: llc < %s -mtriple=thumbv7-linux-gnueabihf %s -o - | FileCheck %s
; Check that new water is created by splitting the basic block right after the
; load instruction. Previously, new water was created before the load
; instruction, which caused the pass to fail to converge.
;
; CHECK: LBB0_324: @ %bb35
; CHECK: vldr s6, LCPI0_480
; CHECK-NEXT: b.w LBB0_461
; CHECK-NEXT: .align 2
; CHECK-NEXT: @ BB#325:
; CHECK-NEXT: .data_region
; CHECK-NEXT: LCPI0_480:
; CHECK-NEXT: .long 1084252750 @ float 5.01200008
define hidden void @wibble(float %arg, float %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, float* nocapture %arg6, i32* nocapture readonly %arg7, float* nocapture %arg8, float* nocapture readnone %arg9, float* nocapture %arg10, i8* nocapture readnone %arg11, float* nocapture %arg12, float* nocapture %arg13, i32* %arg14, float* nocapture %arg15, float* nocapture readnone %arg16, float* nocapture readnone %arg17, float* nocapture %arg18, float* nocapture readnone %arg19, float* nocapture readnone %arg20, float* nocapture readnone %arg21, float* nocapture readnone %arg22, float* nocapture %arg23) {
bb:
switch i32 %arg4, label %bb50 [
i32 1, label %bb24
i32 2, label %bb25
i32 3, label %bb26
i32 4, label %bb27
i32 5, label %bb28
i32 6, label %bb29
i32 7, label %bb30
i32 8, label %bb31
i32 9, label %bb32
i32 10, label %bb33
i32 11, label %bb34
i32 12, label %bb35
i32 13, label %bb36
i32 14, label %bb37
i32 15, label %bb38
i32 16, label %bb39
i32 17, label %bb40
i32 18, label %bb41
i32 19, label %bb42
i32 20, label %bb43
i32 21, label %bb44
i32 22, label %bb45
i32 23, label %bb52
i32 24, label %bb46
i32 25, label %bb47
i32 26, label %bb48
i32 27, label %bb49
]
define void @test(i1 %tst) {
; CHECK-LABEL: test:
; CHECK: vldr {{s[0-9]+}}, [[CONST:\.LCPI[0-9]+_[0-9]+]]
; CHECK-NEXT: b.w [[CONTINUE:\.LBB[0-9]+_[0-9]+]]
bb24: ; preds = %bb
store i32 4, i32* %arg14, align 4
br label %bb52
; CHECK: [[CONST]]:
; CHECK-NEXT: .long
bb25: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
; CHECK: [[CONTINUE]]:
bb26: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
entry:
call i32 @llvm.arm.space(i32 2000, i32 undef)
br i1 %tst, label %true, label %false
bb27: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb28: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb29: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb30: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb31: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb32: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb33: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb34: ; preds = %bb
store i32 6, i32* %arg14, align 4
br label %bb52
bb35: ; preds = %bb
store i32 6, i32* %arg14, align 4
br label %bb52
bb36: ; preds = %bb
store i32 6, i32* %arg14, align 4
br label %bb52
bb37: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb38: ; preds = %bb
store i32 6, i32* %arg14, align 4
br label %bb52
bb39: ; preds = %bb
store i32 4, i32* %arg14, align 4
br label %bb52
bb40: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb41: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb42: ; preds = %bb
store i32 6, i32* %arg14, align 4
br label %bb52
bb43: ; preds = %bb
store i32 5, i32* %arg14, align 4
br label %bb52
bb44: ; preds = %bb
store i32 6, i32* %arg14, align 4
br label %bb52
bb45: ; preds = %bb
store i32 6, i32* %arg14, align 4
br label %bb52
bb46: ; preds = %bb
br label %bb52
bb47: ; preds = %bb
br label %bb52
bb48: ; preds = %bb
br label %bb52
bb49: ; preds = %bb
br label %bb52
bb50: ; preds = %bb
%tmp = icmp eq i32 %arg4, 28
br i1 %tmp, label %bb51, label %bb52
bb51: ; preds = %bb50
store i32 4, i32* %arg14, align 4
br label %bb52
bb52: ; preds = %bb51, %bb50, %bb49, %bb48, %bb47, %bb46, %bb45, %bb44, %bb43, %bb42, %bb41, %bb40, %bb39, %bb38, %bb37, %bb36, %bb35, %bb34, %bb33, %bb32, %bb31, %bb30, %bb29, %bb28, %bb27, %bb26, %bb25, %bb24, %bb
%tmp53 = phi double [ 0.000000e+00, %bb24 ], [ 0x4011EB8520000000, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0.000000e+00, %bb35 ], [ 0x400A353F80000000, %bb36 ], [ 0x40103D70A0000000, %bb37 ], [ 0x400D1EB860000000, %bb38 ], [ 0x40147EF9E0000000, %bb39 ], [ 0x4014F1AA00000000, %bb40 ], [ 0.000000e+00, %bb41 ], [ 0x400B53F7C0000000, %bb42 ], [ 0.000000e+00, %bb43 ], [ 0x400BC6A7E0000000, %bb44 ], [ 0x4011958100000000, %bb45 ], [ 0x40150E5600000000, %bb46 ], [ 0x4013B645A0000000, %bb47 ], [ 0.000000e+00, %bb48 ], [ 0x4011CED920000000, %bb49 ], [ 0x40137CEDA0000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp54 = phi double [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0.000000e+00, %bb35 ], [ 0x40105A1CA0000000, %bb36 ], [ 0.000000e+00, %bb37 ], [ 0x4012083120000000, %bb38 ], [ 0x40186A7F00000000, %bb39 ], [ 0x4016BC6A80000000, %bb40 ], [ 0.000000e+00, %bb41 ], [ 0x4010CCCCC0000000, %bb42 ], [ 0x401326E980000000, %bb43 ], [ 0x40113F7CE0000000, %bb44 ], [ 0x40139999A0000000, %bb45 ], [ 0.000000e+00, %bb46 ], [ 0x40169FBE80000000, %bb47 ], [ 0x4014D4FE00000000, %bb48 ], [ 0.000000e+00, %bb49 ], [ 0x4017126EA0000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp55 = phi double [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0x4012B43960000000, %bb35 ], [ 0x401224DD20000000, %bb36 ], [ 0.000000e+00, %bb37 ], [ 0x40130A3D80000000, %bb38 ], [ 0x401B1A9FC0000000, %bb39 ], [ 0x4018C08320000000, %bb40 ], [ 0x4017126EA0000000, %bb41 ], [ 0.000000e+00, %bb42 ], [ 0x4015D70A40000000, %bb43 ], [ 0.000000e+00, %bb44 ], [ 0x4016D91680000000, %bb45 ], [ 0x40194FDF40000000, %bb46 ], [ 0x4019333340000000, %bb47 ], [ 0.000000e+00, %bb48 ], [ 0x401547AE20000000, %bb49 ], [ 0x4017F7CEE0000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp56 = phi float [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0x40140C49C0000000, %bb35 ], [ 0x4012083120000000, %bb36 ], [ 0x4016F5C280000000, %bb37 ], [ 0x40149BA5E0000000, %bb38 ], [ 0x401C1CAC00000000, %bb39 ], [ 0x4019DF3B60000000, %bb40 ], [ 0x40186A7F00000000, %bb41 ], [ 0x4012D0E560000000, %bb42 ], [ 0x40169FBE80000000, %bb43 ], [ 0x40137CEDA0000000, %bb44 ], [ 0x4018A3D700000000, %bb45 ], [ 0x401AA7EFA0000000, %bb46 ], [ 0.000000e+00, %bb47 ], [ 0x40183126E0000000, %bb48 ], [ 0.000000e+00, %bb49 ], [ 0x401BC6A7E0000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp57 = phi double [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0x4011958100000000, %bb35 ], [ 0x400E76C8C0000000, %bb36 ], [ 0x4014624DE0000000, %bb37 ], [ 0x40115C2900000000, %bb38 ], [ 0x401A353F80000000, %bb39 ], [ 0x40176872C0000000, %bb40 ], [ 0x40172F1AA0000000, %bb41 ], [ 0x40109374C0000000, %bb42 ], [ 0x40149BA5E0000000, %bb43 ], [ 0x401122D0E0000000, %bb44 ], [ 0x40152B0200000000, %bb45 ], [ 0.000000e+00, %bb46 ], [ 0x4016F5C280000000, %bb47 ], [ 0x401445A1C0000000, %bb48 ], [ 0.000000e+00, %bb49 ], [ 0x40194FDF40000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp58 = phi double [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0x400D581060000000, %bb35 ], [ 0x400C72B020000000, %bb36 ], [ 0.000000e+00, %bb37 ], [ 0x400D1EB860000000, %bb38 ], [ 0x40147EF9E0000000, %bb39 ], [ 0x4012ED9160000000, %bb40 ], [ 0.000000e+00, %bb41 ], [ 0.000000e+00, %bb42 ], [ 0.000000e+00, %bb43 ], [ 0x400F22D0E0000000, %bb44 ], [ 0x4010E978E0000000, %bb45 ], [ 0.000000e+00, %bb46 ], [ 0x40125E3540000000, %bb47 ], [ 0.000000e+00, %bb48 ], [ 0.000000e+00, %bb49 ], [ 0x40147EF9E0000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp59 = phi double [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0x4004D4FE00000000, %bb35 ], [ 0x4007126EA0000000, %bb36 ], [ 0x4006D91680000000, %bb37 ], [ 0x400547AE20000000, %bb38 ], [ 0x400B1A9FC0000000, %bb39 ], [ 0x40094FDF40000000, %bb40 ], [ 0.000000e+00, %bb41 ], [ 0.000000e+00, %bb42 ], [ 0.000000e+00, %bb43 ], [ 0x40086A7F00000000, %bb44 ], [ 0.000000e+00, %bb45 ], [ 0.000000e+00, %bb46 ], [ 0.000000e+00, %bb47 ], [ 0x40083126E0000000, %bb48 ], [ 0.000000e+00, %bb49 ], [ 0x400FCED920000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp60 = phi double [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0.000000e+00, %bb35 ], [ 0x3FFBC6A7E0000000, %bb36 ], [ 0x3FFAE147A0000000, %bb37 ], [ 0x3FF9FBE760000000, %bb38 ], [ 0x40009374C0000000, %bb39 ], [ 0x400020C4A0000000, %bb40 ], [ 0.000000e+00, %bb41 ], [ 0x3FFA6E9780000000, %bb42 ], [ 0.000000e+00, %bb43 ], [ 0x3FFCAC0840000000, %bb44 ], [ 0x3FFE76C8C0000000, %bb45 ], [ 0.000000e+00, %bb46 ], [ 0.000000e+00, %bb47 ], [ 0.000000e+00, %bb48 ], [ 0.000000e+00, %bb49 ], [ 0x40086A7F00000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp61 = phi float [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0x3FF5810620000000, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0.000000e+00, %bb35 ], [ 0x3FF6666660000000, %bb36 ], [ 0x3FF428F5C0000000, %bb37 ], [ 0.000000e+00, %bb38 ], [ 0x3FF9893740000000, %bb39 ], [ 0x3FF6D91680000000, %bb40 ], [ 0x3FF7BE76C0000000, %bb41 ], [ 0x3FF49BA5E0000000, %bb42 ], [ 0.000000e+00, %bb43 ], [ 0.000000e+00, %bb44 ], [ 0x3FF8A3D700000000, %bb45 ], [ 0.000000e+00, %bb46 ], [ 0.000000e+00, %bb47 ], [ 0.000000e+00, %bb48 ], [ 0.000000e+00, %bb49 ], [ 0x40037CEDA0000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp62 = phi float [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0x401076C8C0000000, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0.000000e+00, %bb35 ], [ 0x40086A7F00000000, %bb36 ], [ 0x400C395820000000, %bb37 ], [ 0x40094FDF40000000, %bb38 ], [ 0x401178D500000000, %bb39 ], [ 0x40105A1CA0000000, %bb40 ], [ 0x400F22D0E0000000, %bb41 ], [ 0.000000e+00, %bb42 ], [ 0.000000e+00, %bb43 ], [ 0x4009C28F60000000, %bb44 ], [ 0x400DCAC080000000, %bb45 ], [ 0.000000e+00, %bb46 ], [ 0x4010E978E0000000, %bb47 ], [ 0x400E3D70A0000000, %bb48 ], [ 0.000000e+00, %bb49 ], [ 0x4013439580000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp63 = phi float [ 0x40445999A0000000, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 4.100000e+01, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0x4044E66660000000, %bb30 ], [ 0x4044D999A0000000, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0.000000e+00, %bb35 ], [ 0x4045A66660000000, %bb36 ], [ 0x4045666660000000, %bb37 ], [ 4.350000e+01, %bb38 ], [ 0x4044D999A0000000, %bb39 ], [ 0x40450CCCC0000000, %bb40 ], [ 0x4044333340000000, %bb41 ], [ 0.000000e+00, %bb42 ], [ 4.300000e+01, %bb43 ], [ 0x4045B33340000000, %bb44 ], [ 0x4045333340000000, %bb45 ], [ 0.000000e+00, %bb46 ], [ 0x40448CCCC0000000, %bb47 ], [ 0x4044B33340000000, %bb48 ], [ 0.000000e+00, %bb49 ], [ 0.000000e+00, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp64 = phi double [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0x400EE978E0000000, %bb26 ], [ 0x400D916880000000, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0.000000e+00, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0.000000e+00, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0x40083126E0000000, %bb35 ], [ 0x40094FDF40000000, %bb36 ], [ 0x400B8D4FE0000000, %bb37 ], [ 0x4008A3D700000000, %bb38 ], [ 0x40110624E0000000, %bb39 ], [ 0x40100418A0000000, %bb40 ], [ 0x400CE56040000000, %bb41 ], [ 0x4007BE76C0000000, %bb42 ], [ 0.000000e+00, %bb43 ], [ 0x4009893740000000, %bb44 ], [ 0.000000e+00, %bb45 ], [ 0x401428F5C0000000, %bb46 ], [ 0x4010B020C0000000, %bb47 ], [ 0.000000e+00, %bb48 ], [ 0x400FCED920000000, %bb49 ], [ 0x40115C2900000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp65 = phi double [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0.000000e+00, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0.000000e+00, %bb28 ], [ 0x4003B645A0000000, %bb29 ], [ 0x40037CEDA0000000, %bb30 ], [ 0x4003B645A0000000, %bb31 ], [ 0x4003EF9DC0000000, %bb32 ], [ 0.000000e+00, %bb33 ], [ 0.000000e+00, %bb34 ], [ 0x3FFFCED920000000, %bb35 ], [ 0x40013F7CE0000000, %bb36 ], [ 0.000000e+00, %bb37 ], [ 0x40009374C0000000, %bb38 ], [ 0x4005F3B640000000, %bb39 ], [ 0x4005810620000000, %bb40 ], [ 0x4003B645A0000000, %bb41 ], [ 0.000000e+00, %bb42 ], [ 0x40010624E0000000, %bb43 ], [ 0x4001EB8520000000, %bb44 ], [ 0x40025E3540000000, %bb45 ], [ 0x40062D0E60000000, %bb46 ], [ 0x4007F7CEE0000000, %bb47 ], [ 0.000000e+00, %bb48 ], [ 0x4007851EC0000000, %bb49 ], [ 0x400B53F7C0000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0.000000e+00, %bb ]
%tmp66 = phi double [ 0.000000e+00, %bb24 ], [ 0.000000e+00, %bb25 ], [ 0x3FF9FBE760000000, %bb26 ], [ 0.000000e+00, %bb27 ], [ 0x3FFB53F7C0000000, %bb28 ], [ 0x3FF9893740000000, %bb29 ], [ 0.000000e+00, %bb30 ], [ 0x3FF8A3D700000000, %bb31 ], [ 0.000000e+00, %bb32 ], [ 0x3FF9168720000000, %bb33 ], [ 0x3FF49BA5E0000000, %bb34 ], [ 0x3FF6666660000000, %bb35 ], [ 0x3FF8A3D700000000, %bb36 ], [ 0.000000e+00, %bb37 ], [ 0x3FF6666660000000, %bb38 ], [ 0x3FFC395820000000, %bb39 ], [ 0x3FFB53F7C0000000, %bb40 ], [ 0.000000e+00, %bb41 ], [ 0x3FF7BE76C0000000, %bb42 ], [ 0x3FF6D91680000000, %bb43 ], [ 0x3FF83126E0000000, %bb44 ], [ 0.000000e+00, %bb45 ], [ 0.000000e+00, %bb46 ], [ 0x40005A1CA0000000, %bb47 ], [ 0x3FFD1EB860000000, %bb48 ], [ 0x3FFFCED920000000, %bb49 ], [ 0x4001EB8520000000, %bb51 ], [ 0.000000e+00, %bb50 ], [ 0x3FF50E5600000000, %bb ]
switch i32 %arg5, label %bb70 [
i32 0, label %bb105
i32 12, label %bb67
i32 7, label %bb69
]
bb67: ; preds = %bb52
%tmp68 = fadd float %tmp63, 1.000000e+01
store float %tmp68, float* %arg23, align 4
br label %bb105
bb69: ; preds = %bb52
br label %bb105
bb70: ; preds = %bb52
%tmp71 = icmp ult i32 %arg3, 16
br i1 %tmp71, label %bb72, label %bb105
bb72: ; preds = %bb70
%tmp73 = sitofp i32 %arg3 to float
%tmp74 = load float* %arg23, align 4
%tmp75 = fsub float %tmp73, %tmp74
%tmp76 = fpext float %tmp75 to double
%tmp77 = fmul double %tmp76, %tmp76
%tmp78 = fmul double %tmp77, 1.200000e-04
%tmp79 = fsub double 1.000000e+00, %tmp78
%tmp80 = fptrunc double %tmp79 to float
%tmp81 = fadd float %tmp63, 1.000000e+01
%tmp82 = fsub float %tmp73, %tmp81
%tmp83 = fpext float %tmp82 to double
%tmp84 = fmul double %tmp83, %tmp83
%tmp85 = fmul double %tmp84, 1.200000e-04
%tmp86 = fsub double 1.000000e+00, %tmp85
%tmp87 = fptrunc double %tmp86 to float
%tmp88 = fadd float %tmp63, -2.000000e+01
%tmp89 = fsub float %tmp73, %tmp88
%tmp90 = fpext float %tmp89 to double
%tmp91 = fmul double %tmp90, %tmp90
%tmp92 = fmul double %tmp91, 1.200000e-04
%tmp93 = fsub double 1.000000e+00, %tmp92
%tmp94 = fptrunc double %tmp93 to float
%tmp95 = fadd float %tmp63, -1.000000e+01
%tmp96 = fsub float %tmp73, %tmp95
%tmp97 = fpext float %tmp96 to double
%tmp98 = fmul double %tmp97, %tmp97
%tmp99 = fmul double %tmp98, 1.200000e-04
%tmp100 = fsub double 1.000000e+00, %tmp99
%tmp101 = fptrunc double %tmp100 to float
%tmp102 = fpext float %tmp87 to double
%tmp103 = fpext float %tmp101 to double
%tmp104 = fpext float %tmp94 to double
br label %bb105
bb105: ; preds = %bb72, %bb70, %bb69, %bb67, %bb52
%tmp106 = phi float [ 0.000000e+00, %bb67 ], [ 0x3FF028F5C0000000, %bb69 ], [ 0.000000e+00, %bb72 ], [ 0.000000e+00, %bb70 ], [ 0.000000e+00, %bb52 ]
%tmp107 = phi float [ %tmp61, %bb67 ], [ %tmp56, %bb69 ], [ 0.000000e+00, %bb72 ], [ 0.000000e+00, %bb70 ], [ %tmp62, %bb52 ]
%tmp108 = phi float [ 0.000000e+00, %bb67 ], [ 0.000000e+00, %bb69 ], [ %tmp80, %bb72 ], [ 0.000000e+00, %bb70 ], [ 0.000000e+00, %bb52 ]
%tmp109 = phi double [ 0.000000e+00, %bb67 ], [ 0.000000e+00, %bb69 ], [ %tmp103, %bb72 ], [ 0.000000e+00, %bb70 ], [ 0.000000e+00, %bb52 ]
%tmp110 = phi double [ 0.000000e+00, %bb67 ], [ 0.000000e+00, %bb69 ], [ %tmp104, %bb72 ], [ 0.000000e+00, %bb70 ], [ 0.000000e+00, %bb52 ]
%tmp111 = phi double [ 0.000000e+00, %bb67 ], [ 0.000000e+00, %bb69 ], [ %tmp102, %bb72 ], [ 0.000000e+00, %bb70 ], [ 0.000000e+00, %bb52 ]
%tmp112 = fmul float %tmp106, %tmp107
%tmp113 = fmul float %tmp112, %tmp108
%tmp114 = fmul float %tmp113, 5.000000e+01
%tmp115 = fmul float %tmp114, 7.500000e-01
%tmp116 = fdiv float %arg, %tmp115
%tmp117 = tail call float @widget(float %tmp116)
%tmp118 = fpext float %tmp117 to double
%tmp119 = fadd double %tmp118, 1.000000e+00
%tmp120 = fmul double %tmp119, 5.000000e+01
%tmp121 = fptrunc double %tmp120 to float
store float %tmp121, float* %arg6, align 4
%tmp122 = load i32* %arg14, align 4
%tmp123 = sitofp i32 %tmp122 to float
%tmp124 = fmul float %tmp123, %arg
%tmp125 = fdiv float %tmp124, 3.150000e+02
%tmp126 = tail call float @widget(float %tmp125)
%tmp127 = fmul float %tmp126, 5.000000e+01
store float %tmp127, float* %arg8, align 4
%tmp128 = fcmp ugt float %tmp127, 2.500000e+02
%tmp129 = fcmp ogt float %tmp127, 2.500000e+02
%tmp130 = and i1 %tmp128, %tmp129
br i1 %tmp130, label %bb131, label %bb140
bb131: ; preds = %bb105
%tmp132 = load i32* %arg7, align 4
%tmp133 = icmp eq i32 %tmp132, 48
br i1 %tmp133, label %bb134, label %bb140
bb134: ; preds = %bb131
%tmp135 = fadd float %tmp127, 3.500000e+02
%tmp136 = fmul float %tmp135, 4.000000e+00
%tmp137 = fadd float %tmp136, 0.000000e+00
%tmp138 = fmul float %tmp137, 0x3FF2666660000000
%tmp139 = fpext float %tmp138 to double
br label %bb140
bb140: ; preds = %bb134, %bb131, %bb105
%tmp141 = phi double [ %tmp139, %bb134 ], [ 0.000000e+00, %bb131 ], [ 0.000000e+00, %bb105 ]
%tmp142 = tail call double @wombat(double %tmp141)
%tmp143 = fptrunc double %tmp142 to float
store float %tmp143, float* %arg10, align 4
%tmp144 = fmul double %tmp111, 0x4048066666666667
%tmp145 = load float* %arg6, align 4
%tmp146 = fpext float %tmp145 to double
%tmp147 = fmul double %tmp144, %tmp146
%tmp148 = fmul double %tmp66, %tmp147
%tmp149 = fmul double %tmp148, 7.500000e-01
%tmp150 = fmul double %tmp111, 0x404375C28F5C28F5
%tmp151 = fmul double %tmp150, %tmp146
%tmp152 = fmul double %tmp65, %tmp151
%tmp153 = fmul double %tmp152, 7.500000e-01
%tmp154 = fadd double %tmp149, %tmp153
%tmp155 = fmul double %tmp109, 0x4042999999999999
%tmp156 = fmul double %tmp155, %tmp146
%tmp157 = fmul double %tmp64, %tmp156
%tmp158 = fmul double %tmp157, 7.500000e-01
%tmp159 = fadd double %tmp158, %tmp154
%tmp160 = fmul double %tmp109, 3.210000e+01
%tmp161 = fmul double %tmp160, %tmp146
%tmp162 = fmul double %tmp53, %tmp161
%tmp163 = fmul double %tmp162, 7.500000e-01
%tmp164 = fadd double %tmp163, %tmp159
%tmp165 = fmul double %tmp109, 3.162000e+01
%tmp166 = fmul double %tmp165, %tmp146
%tmp167 = fmul double %tmp54, %tmp166
%tmp168 = fmul double %tmp167, 7.500000e-01
%tmp169 = fadd double %tmp168, %tmp164
%tmp170 = fmul double %tmp110, 3.030000e+01
%tmp171 = fmul double %tmp170, %tmp146
%tmp172 = fmul double %tmp55, %tmp171
%tmp173 = fmul double %tmp172, 7.500000e-01
%tmp174 = fadd double %tmp173, %tmp169
%tmp175 = fmul double %tmp110, 3.131000e+01
%tmp176 = fmul double %tmp175, %tmp146
%tmp177 = fpext float %tmp56 to double
%tmp178 = fmul double %tmp177, %tmp176
%tmp179 = fmul double %tmp178, 7.500000e-01
%tmp180 = fadd double %tmp179, %tmp174
%tmp181 = fmul double %tmp110, 0x4040466666666667
%tmp182 = fmul double %tmp181, %tmp146
%tmp183 = fmul double %tmp57, %tmp182
%tmp184 = fmul double %tmp183, 7.500000e-01
%tmp185 = fadd double %tmp184, %tmp180
%tmp186 = fmul double %tmp109, 3.480000e+01
%tmp187 = fmul double %tmp186, %tmp146
%tmp188 = fmul double %tmp58, %tmp187
%tmp189 = fmul double %tmp188, 7.500000e-01
%tmp190 = fadd double %tmp189, %tmp185
%tmp191 = fmul double %tmp109, 4.092000e+01
%tmp192 = fmul double %tmp191, %tmp146
%tmp193 = fmul double %tmp59, %tmp192
%tmp194 = fmul double %tmp193, 7.500000e-01
%tmp195 = fadd double %tmp194, %tmp190
%tmp196 = fmul double %tmp111, 4.650000e+01
%tmp197 = fmul double %tmp196, %tmp146
%tmp198 = fmul double %tmp60, %tmp197
%tmp199 = fmul double %tmp198, 7.500000e-01
%tmp200 = fadd double %tmp199, %tmp195
%tmp201 = fmul double %tmp111, 4.929000e+01
%tmp202 = fmul double %tmp201, %tmp146
%tmp203 = fpext float %tmp61 to double
%tmp204 = fmul double %tmp203, %tmp202
%tmp205 = fmul double %tmp204, 7.500000e-01
%tmp206 = fadd double %tmp205, %tmp200
%tmp207 = fdiv double %tmp206, 1.000000e+03
%tmp208 = fptrunc double %tmp207 to float
store float %tmp208, float* %arg12, align 4
%tmp209 = load float* %arg10, align 4
%tmp210 = fmul float %tmp209, 1.000000e+02
%tmp211 = fmul float %tmp208, 2.000000e+01
%tmp212 = fdiv float %tmp210, %tmp211
store float %tmp212, float* %arg13, align 4
%tmp213 = load float* %arg18, align 4
%tmp214 = fcmp olt float %tmp213, 1.500000e+00
br i1 %tmp214, label %bb217, label %bb215
bb215: ; preds = %bb224, %bb140
%tmp216 = load float* %arg15, align 4
br label %bb228
bb217: ; preds = %bb224, %bb140
%tmp218 = phi float [ %tmp225, %bb224 ], [ %tmp213, %bb140 ]
%tmp219 = phi i32 [ %tmp226, %bb224 ], [ 0, %bb140 ]
%tmp220 = getelementptr inbounds [16 x float]* @global, i32 0, i32 %tmp219
%tmp221 = load float* %tmp220, align 4
%tmp222 = fcmp ogt float %tmp221, %tmp218
br i1 %tmp222, label %bb223, label %bb224
bb223: ; preds = %bb217
store float %tmp221, float* %arg18, align 4
br label %bb224
bb224: ; preds = %bb223, %bb217
%tmp225 = phi float [ %tmp218, %bb217 ], [ %tmp221, %bb223 ]
%tmp226 = add nsw i32 %tmp219, 1
%tmp227 = icmp eq i32 %tmp219, 15
br i1 %tmp227, label %bb215, label %bb217
bb228: ; preds = %bb235, %bb215
%tmp229 = phi float [ %tmp216, %bb215 ], [ %tmp236, %bb235 ]
%tmp230 = phi i32 [ 0, %bb215 ], [ %tmp237, %bb235 ]
%tmp231 = getelementptr inbounds [16 x float]* @global, i32 0, i32 %tmp230
%tmp232 = load float* %tmp231, align 4
%tmp233 = fcmp ogt float %tmp232, %tmp229
br i1 %tmp233, label %bb234, label %bb235
bb234: ; preds = %bb228
store float %tmp232, float* %arg15, align 4
br label %bb235
bb235: ; preds = %bb234, %bb228
%tmp236 = phi float [ %tmp229, %bb228 ], [ %tmp232, %bb234 ]
%tmp237 = add nsw i32 %tmp230, 1
%tmp238 = icmp eq i32 %tmp230, 15
br i1 %tmp238, label %bb239, label %bb228
bb239: ; preds = %bb235
true:
%val = phi float [12345.0, %entry], [undef, %false]
call void @bar(float %val)
ret void
false:
br label %true
}
declare double @wombat(double)
declare float @widget(float)
declare void @bar(float)
declare i32 @llvm.arm.space(i32, i32)