reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
; RUN: llc < %s -march=xcore | FileCheck %s

; CHECK-LABEL: f0Test
; CHECK: entsp 1
; CHECK: bl f0
; CHECK: retsp 1
%struct.st0 = type { [0 x i32] }
declare void @f0(%struct.st0*) nounwind
define void @f0Test(%struct.st0* byval %s0) nounwind {
entry:
  call void @f0(%struct.st0* %s0) nounwind
  ret void
}

; CHECK-LABEL: f1Test
; CHECK: entsp 13
; CHECK: stw r4, sp[12]
; CHECK: stw r5, sp[11]
; CHECK: mov r4, r0
; CHECK: ldaw r5, sp[1]
; CHECK: ldc r2, 40
; CHECK: mov r0, r5
; CHECK: bl __memcpy_4
; CHECK: mov r0, r5
; CHECK: bl f1
; CHECK: mov r0, r4
; CHECK: ldw r5, sp[11]
; CHECK: ldw r4, sp[12]
; CHECK: retsp 13
%struct.st1 = type { [10 x i32] }
declare void @f1(%struct.st1*) nounwind
define i32 @f1Test(i32 %i, %struct.st1* byval %s1) nounwind {
entry:
  call void @f1(%struct.st1* %s1) nounwind
  ret i32 %i
}

; CHECK-LABEL: f2Test
; CHECK: extsp 4
; CHECK: stw lr, sp[1]
; CHECK: mov r11, r1
; CHECK-DAG: stw r2, sp[3]
; CHECK-DAG: stw r3, sp[4]
; CHECK: ldw r0, r0[0]
; CHECK: stw r0, sp[2]
; CHECK: ldaw r1, sp[2]
; CHECK: mov r0, r11
; CHECK: bl f2
; CHECK: ldw lr, sp[1]
; CHECK: ldaw sp, sp[4]
; CHECK: retsp 0
%struct.st2 = type { i32 }
declare void @f2(i32, %struct.st2*) nounwind
define void @f2Test(%struct.st2* byval %s2, i32 %i, ...) nounwind {
entry:
  call void @f2(i32 %i, %struct.st2* %s2)
  ret void
}

; CHECK-LABEL: f3Test
; CHECK: entsp 2
; CHECK: ldc r1, 0
; CHECK: ld8u r2, r0[r1]
; CHECK: ldaw r0, sp[1]
; CHECK: st8 r2, r0[r1]
; CHECK: bl f
; CHECK: retsp 2
declare void @f3(i8*) nounwind
define void @f3Test(i8* byval %v) nounwind {
entry:
  call void @f3(i8* %v) nounwind
  ret void
}