From: Reed Kotler Date: Sun, 15 Sep 2013 02:09:08 +0000 (+0000) Subject: Expand the mask capability for deciding which functions are mips16 and mips32 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=6febf857f690665bc33b84c957cdefb39a27f63d;p=oota-llvm.git Expand the mask capability for deciding which functions are mips16 and mips32 so it can be better used for general interoperability testing between mips32 and mips16. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190762 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Mips/MipsOs16.cpp b/lib/Target/Mips/MipsOs16.cpp index 5f9b60c6608..49c73b56142 100644 --- a/lib/Target/Mips/MipsOs16.cpp +++ b/lib/Target/Mips/MipsOs16.cpp @@ -103,8 +103,9 @@ bool MipsOs16::runOnModule(Module &M) { if (F->isDeclaration()) continue; DEBUG(dbgs() << "Working on " << F->getName() << "\n"); if (usingMask) { - if ((functionIndex < Mips32FunctionMask.length()) && - (Mips32FunctionMask[functionIndex] == '1')) { + if (functionIndex == Mips32FunctionMask.length()) + functionIndex = 0; + if (Mips32FunctionMask[functionIndex] == '1') { DEBUG(dbgs() << "mask forced mips32: " << F->getName() << "\n"); F->addFnAttr("nomips16"); } diff --git a/test/CodeGen/Mips/fp16mix.ll b/test/CodeGen/Mips/fp16mix.ll new file mode 100644 index 00000000000..73b11562f40 --- /dev/null +++ b/test/CodeGen/Mips/fp16mix.ll @@ -0,0 +1,73 @@ +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=static -mips32-function-mask=10 -mips-os16 < %s | FileCheck %s -check-prefix=fmask1 + +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=static -mips32-function-mask=01 -mips-os16 < %s | FileCheck %s -check-prefix=fmask2 + +; Function Attrs: nounwind optsize readnone +define void @foo1() { +entry: + ret void +; fmask1: .ent foo1 +; fmask1: .set noreorder +; fmask1: .set nomacro +; fmask1: .set noat +; fmask1: .set at +; fmask1: .set macro +; fmask1: .set reorder +; fmask1: .end foo1 +; fmask2: .ent foo1 +; fmask2: save {{.*}} +; fmask2: .end foo1 +} + +; Function Attrs: nounwind optsize readnone +define void @foo2() { +entry: + ret void +; fmask2: .ent foo2 +; fmask2: .set noreorder +; fmask2: .set nomacro +; fmask2: .set noat +; fmask2: .set at +; fmask2: .set macro +; fmask2: .set reorder +; fmask2: .end foo2 +; fmask1: .ent foo2 +; fmask1: save {{.*}} +; fmask1: .end foo2 +} + +; Function Attrs: nounwind optsize readnone +define void @foo3() { +entry: + ret void +; fmask1: .ent foo3 +; fmask1: .set noreorder +; fmask1: .set nomacro +; fmask1: .set noat +; fmask1: .set at +; fmask1: .set macro +; fmask1: .set reorder +; fmask1: .end foo3 +; fmask2: .ent foo3 +; fmask2: save {{.*}} +; fmask2: .end foo3 +} + +; Function Attrs: nounwind optsize readnone +define void @foo4() { +entry: + ret void +; fmask2: .ent foo4 +; fmask2: .set noreorder +; fmask2: .set nomacro +; fmask2: .set noat +; fmask2: .set at +; fmask2: .set macro +; fmask2: .set reorder +; fmask2: .end foo4 +; fmask1: .ent foo4 +; fmask1: save {{.*}} +; fmask1: .end foo4 +} + +