mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 02:29:18 +00:00
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
32 lines
792 B
LLVM
32 lines
792 B
LLVM
; 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.
|
|
|
|
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
|
|
|
|
false:
|
|
br label %true
|
|
}
|
|
|
|
declare void @bar(float)
|
|
declare i32 @llvm.arm.space(i32, i32)
|