mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
e75a9647dd
This seems to have been relying on extra spills being inserted in these blocks to increase the code size to trigger branch relaxation. This broke when these spills were avoided. Add some asm to pad the size of the blocks to make it not matter.
67 lines
1.7 KiB
LLVM
67 lines
1.7 KiB
LLVM
; RUN: llc -O0 -mtriple=mips-img-linux-gnu -mcpu=mips32r6 -relocation-model=pic < %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-PIC
|
|
; RUN: llc -O0 -mtriple=mips-img-linux-gnu -mcpu=mips32r6 -relocation-model=static < %s -o - | FileCheck %s --check-prefixes=CHECK-STATIC
|
|
|
|
declare i32 @boo(...)
|
|
declare i32 @foo(...)
|
|
|
|
define i32 @main(i32 signext %argc, i8** %argv) {
|
|
; CHECK: main:
|
|
; CHECK: # %bb.1:
|
|
; CHECK-PIC: addiu
|
|
; CHECK-PIC: sw
|
|
; CHECK-PIC: lui
|
|
; CHECK-PIC: addiu
|
|
; CHECK-PIC: balc
|
|
; CHECK-PIC: addu
|
|
; CHECK-PIC: lw
|
|
; CHECK-PIC: addiu
|
|
; CHECK-PIC: jrc
|
|
; CHECK-PIC: bc
|
|
; CHECK-PIC: bnezc
|
|
; CHECK-PIC: nop
|
|
; CHECK-PIC: bc
|
|
|
|
; CHECK-STATIC: bc
|
|
; CHECK-STATIC: j
|
|
; CHECK-STATIC: bnezc
|
|
; CHECK-STATIC: nop
|
|
; CHECK-STATIC: j
|
|
entry:
|
|
%retval = alloca i32, align 4
|
|
%argc.addr = alloca i32, align 4
|
|
%argv.addr = alloca i8**, align 4
|
|
store i32 0, i32* %retval, align 4
|
|
store i32 %argc, i32* %argc.addr, align 4
|
|
store i8** %argv, i8*** %argv.addr, align 4
|
|
%0 = load i32, i32* %argc.addr, align 4
|
|
%cmp = icmp sgt i32 %0, 1
|
|
br i1 %cmp, label %if.then, label %if.end4
|
|
|
|
if.then:
|
|
call void asm sideeffect ".space 10", "~{$1}"()
|
|
%1 = load i32, i32* %argc.addr, align 4
|
|
%cmp1 = icmp sgt i32 %1, 3
|
|
br i1 %cmp1, label %if.then2, label %if.end
|
|
|
|
if.then2:
|
|
call void asm sideeffect ".space 10", "~{$1}"()
|
|
%call = call i32 bitcast (i32 (...)* @boo to i32 ()*)()
|
|
store i32 %call, i32* %retval, align 4
|
|
br label %return
|
|
|
|
if.end:
|
|
call void asm sideeffect ".space 4194228", "~{$1}"()
|
|
%call3 = call i32 bitcast (i32 (...)* @foo to i32 ()*)()
|
|
store i32 %call3, i32* %retval, align 4
|
|
br label %return
|
|
|
|
if.end4:
|
|
store i32 0, i32* %retval, align 4
|
|
br label %return
|
|
|
|
return:
|
|
%2 = load i32, i32* %retval, align 4
|
|
ret i32 %2
|
|
|
|
}
|