[llvm] r221905 - ARM: allow constpool entry to be moved to the user's block in all cases.

Tim Northover tnorthover at apple.com
Thu Nov 13 09:58:53 PST 2014


Author: tnorthover
Date: Thu Nov 13 11:58:53 2014
New Revision: 221905

URL: http://llvm.org/viewvc/llvm-project?rev=221905&view=rev
Log:
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

Modified:
    llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
    llvm/trunk/test/CodeGen/Thumb2/constant-islands-new-island.ll

Modified: llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp?rev=221905&r1=221904&r2=221905&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMConstantIslandPass.cpp Thu Nov 13 11:58:53 2014
@@ -1207,7 +1207,8 @@ bool ARMConstantIslands::findAvailableWa
     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(
     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);
 }
 

Modified: llvm/trunk/test/CodeGen/Thumb2/constant-islands-new-island.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb2/constant-islands-new-island.ll?rev=221905&r1=221904&r2=221905&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/Thumb2/constant-islands-new-island.ll (original)
+++ llvm/trunk/test/CodeGen/Thumb2/constant-islands-new-island.ll Thu Nov 13 11:58:53 2014
@@ -1,395 +1,31 @@
-; RUN: llc < %s -mtriple=thumbv7-apple-ios7.1.0 -mcpu=cortex-a8 | FileCheck %s
-
- at 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
-  ]
-
-bb24:                                             ; preds = %bb
-  store i32 4, i32* %arg14, align 4
-  br label %bb52
-
-bb25:                                             ; preds = %bb
-  store i32 5, i32* %arg14, align 4
-  br label %bb52
-
-bb26:                                             ; preds = %bb
-  store i32 5, i32* %arg14, align 4
-  br label %bb52
-
-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
+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]+]]
+
+; CHECK: [[CONST]]:
+; CHECK-NEXT: .long
+
+; CHECK: [[CONTINUE]]:
+
+entry:
+  call i32 @llvm.arm.space(i32 2000, i32 undef)
+  br i1 %tst, label %true, label %false
+
+true:
+  %val = phi float [12345.0, %entry], [undef, %false]
+  call void @bar(float %val)
   ret void
-}
 
-declare double @wombat(double)
+false:
+  br label %true
+}
 
-declare float @widget(float)
+declare void @bar(float)
+declare i32 @llvm.arm.space(i32, i32)





More information about the llvm-commits mailing list