llvm-6502/test/CodeGen/Mips/longbranch.ll
Akira Hatanaka 273956d8c6 Fix mips' long branch pass.
Instructions emitted to compute branch offsets now use immediate operands
instead of symbolic labels. This change was needed because there were problems
when R_MIPS_HI16/LO16 relocations were used to make shared objects.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162731 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-28 03:03:05 +00:00

32 lines
856 B
LLVM

; RUN: llc -march=mipsel -force-mips-long-branch < %s | FileCheck %s -check-prefix=O32
; RUN: llc -march=mips64el -mcpu=mips64 -mattr=n64 -force-mips-long-branch < %s | FileCheck %s -check-prefix=N64
@g0 = external global i32
define void @foo1(i32 %s) nounwind {
entry:
; O32: bal
; O32: lui $at, 0
; O32: addiu $at, $at, {{[0-9]+}}
; N64: lui $at, 0
; N64: daddiu $at, $at, 0
; N64: dsll $at, $at, 16
; N64: daddiu $at, $at, 0
; N64: bal
; N64: dsll $at, $at, 16
; N64: daddiu $at, $at, {{[0-9]+}}
%tobool = icmp eq i32 %s, 0
br i1 %tobool, label %if.end, label %if.then
if.then: ; preds = %entry
%0 = load i32* @g0, align 4
%add = add nsw i32 %0, 12
store i32 %add, i32* @g0, align 4
br label %if.end
if.end: ; preds = %entry, %if.then
ret void
}