diff options
author | Reed Kotler <rkotler@mips.com> | 2013-12-11 03:32:44 +0000 |
---|---|---|
committer | Reed Kotler <rkotler@mips.com> | 2013-12-11 03:32:44 +0000 |
commit | d194a4ae67ed47d128a08ebca2448e154c1367ea (patch) | |
tree | 1d439b0b92fbf77b0639cbb403eb8458276cba20 /test/CodeGen/Mips/sr1.ll | |
parent | ec5ebdec47340fc297555e9db7230c325da76585 (diff) |
Distinguish and choose 16 or 32 bit forms of save/restore for Mips16.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196999 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Mips/sr1.ll')
-rw-r--r-- | test/CodeGen/Mips/sr1.ll | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/CodeGen/Mips/sr1.ll b/test/CodeGen/Mips/sr1.ll new file mode 100644 index 00000000000..53036612ff6 --- /dev/null +++ b/test/CodeGen/Mips/sr1.ll @@ -0,0 +1,64 @@ +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=NEG + +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -relocation-model=static < %s | FileCheck %s + +@f = common global float 0.000000e+00, align 4 + +; Function Attrs: nounwind +define void @foo1() #0 { +entry: + %c = alloca [10 x i8], align 1 + %arraydecay = getelementptr inbounds [10 x i8]* %c, i32 0, i32 0 + call void @x(i8* %arraydecay) + %arraydecay1 = getelementptr inbounds [10 x i8]* %c, i32 0, i32 0 + call void @x(i8* %arraydecay1) + ret void +; CHECK: .ent foo1 +; CHECK: save $ra, $16, $17, [[FS:[0-9]+]] # 16 bit inst +; CHECK: restore $ra, $16, $17, [[FS]] +; CHECK: .end foo1 +} + +declare void @x(i8*) #1 + +; Function Attrs: nounwind +define void @foo2() #0 { +entry: + %c = alloca [150 x i8], align 1 + %arraydecay = getelementptr inbounds [150 x i8]* %c, i32 0, i32 0 + call void @x(i8* %arraydecay) + %arraydecay1 = getelementptr inbounds [150 x i8]* %c, i32 0, i32 0 + call void @x(i8* %arraydecay1) + ret void +; CHECK: .ent foo2 +; CHECK: save $ra, $16, $17, [[FS:[0-9]+]] +; CHECK: restore $ra, $16, $17, [[FS]] +; CHECK: .end foo2 +; NEG: .ent foo2 +; NEG-NOT: save $ra, $16, $17, [[FS:[0-9]+]] # 16 bit inst +; NEG-NOT: restore $ra, $16, $17, [[FS]] # 16 bit inst +; NEG: .end foo2 +} + +; Function Attrs: nounwind +define void @foo3() #0 { +entry: + %call = call float @xf() + store float %call, float* @f, align 4 + ret void +; CHECK: .ent foo3 +; CHECK: save $ra, $16, $17, [[FS:[0-9]+]], $18 +; CHECK: restore $ra, $16, $17, [[FS]], $18 +; CHECK: .end foo3 +; NEG: .ent foo3 +; NEG-NOT: save $ra, $16, $17, [[FS:[0-9]+]], $18 # 16 bit inst +; NEG-NOT: restore $ra, $16, $17, [[FS]], $18 # 16 bit inst +; NEG: .end foo3 +} + +declare float @xf() #1 + +attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + + |