llvm.org GIT mirror llvm / master test / CodeGen / ARM / ipra-no-csr.ll

Tree @master (Download .tar.gz)

ipra-no-csr.ll @masterraw · history · blame

; RUN: llc -mtriple armv7a--none-eabi < %s              | FileCheck %s
; RUN: llc -mtriple armv7a--none-eabi < %s -enable-ipra | FileCheck %s

; Other targets disable callee-saved registers for internal functions when
; using IPRA, but that isn't profitable for ARM because the PUSH/POP
; instructions can more efficiently save registers than using individual
; LDR/STRs in the caller.

define internal void @callee() norecurse {
; CHECK-LABEL: callee:
; CHECK: push {r4, lr}
; CHECK: pop {r4, pc}
  tail call void asm sideeffect "", "~{r4}"()
  ret void

define void @caller() {
  call void @callee()
  ret void