[Hexagon] Add testcases for stack alignment and variable-sized objects

llvm-svn: 235602
This commit is contained in:
Krzysztof Parzyszek 2015-04-23 15:12:49 +00:00
parent 9856150503
commit 7916d2dce4
4 changed files with 89 additions and 0 deletions

View File

@ -0,0 +1,21 @@
; RUN: llc -O0 -march=hexagon < %s | FileCheck %s
; CHECK: and(r29, #-32)
; CHECK-DAG: add(r29, #0)
; CHECK-DAG: add(r29, #28)
target triple = "hexagon-unknown-unknown"
; Function Attrs: nounwind uwtable
define void @foo() #0 {
entry:
%x = alloca i32, align 4
%y = alloca i32, align 32
%0 = bitcast i32* %x to i8*
%1 = bitcast i32* %y to i8*
call void @bar(i8* %0, i8* %1)
ret void
}
declare void @bar(i8*, i8*) #0
attributes #0 = { nounwind }

View File

@ -0,0 +1,27 @@
; RUN: llc -O0 -march=hexagon < %s | FileCheck %s
; CHECK: and(r29, #-128)
; CHECK-DAG: add(r29, #0)
; CHECK-DAG: add(r29, #64)
; CHECK-DAG: add(r29, #96)
; CHECK-DAG: add(r29, #124)
target triple = "hexagon-unknown-unknown"
; Function Attrs: nounwind uwtable
define void @foo() #0 {
entry:
%x = alloca i32, align 4
%y = alloca i32, align 32
%z = alloca i32, align 64
%w = alloca i32, align 128
%0 = bitcast i32* %x to i8*
%1 = bitcast i32* %y to i8*
%2 = bitcast i32* %z to i8*
%3 = bitcast i32* %w to i8*
call void @bar(i8* %0, i8* %1, i8* %2, i8* %3)
ret void
}
declare void @bar(i8*, i8*, i8*, i8*) #0
attributes #0 = { nounwind }

View File

@ -0,0 +1,18 @@
; RUN: llc -O0 -march=hexagon < %s | FileCheck %s
; CHECK: sub(r29, r[[REG:[0-9]+]])
; CHECK: r29 = r[[REG]]
target triple = "hexagon-unknown-unknown"
; Function Attrs: nounwind uwtable
define void @foo(i32 %n) #0 {
entry:
%x = alloca i32, i32 %n
%0 = bitcast i32* %x to i8*
call void @bar(i8* %0)
ret void
}
declare void @bar(i8*) #0
attributes #0 = { nounwind }

View File

@ -0,0 +1,23 @@
; RUN: llc -O0 -march=hexagon < %s | FileCheck %s
; CHECK-DAG: r[[AP:[0-9]+]] = and(r30, #-32)
; CHECK-DAG: r1 = add(r[[AP]], #-32)
; CHECK-DAG: sub(r29, r[[SP:[0-9]+]])
; CHECK-DAG: r29 = r[[SP]]
target triple = "hexagon-unknown-unknown"
; Function Attrs: nounwind uwtable
define void @foo(i32 %n) #0 {
entry:
%x = alloca i32, i32 %n
%y = alloca i32, align 32
%0 = bitcast i32* %x to i8*
%1 = bitcast i32* %y to i8*
call void @bar(i8* %0, i8* %1)
ret void
}
declare void @bar(i8*, i8* %y) #0
attributes #0 = { nounwind }