[llvm] r262725 - [mips][microMIPS] Prevent usage of OR16_MMR6 instruction when code for microMIPS is generated.
Zoran Jovanovic via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 4 09:34:32 PST 2016
Author: zjovanovic
Date: Fri Mar 4 11:34:31 2016
New Revision: 262725
URL: http://llvm.org/viewvc/llvm-project?rev=262725&view=rev
Log:
[mips][microMIPS] Prevent usage of OR16_MMR6 instruction when code for microMIPS is generated.
Author: milena.vujosevic.janicic
Reviewers: dsanders
Differential Revision: http://reviews.llvm.org/D17373
Modified:
llvm/trunk/lib/Target/Mips/MicroMips32r6InstrFormats.td
llvm/trunk/lib/Target/Mips/MicroMips32r6InstrInfo.td
llvm/trunk/test/CodeGen/Mips/micromips-or16.ll
Modified: llvm/trunk/lib/Target/Mips/MicroMips32r6InstrFormats.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MicroMips32r6InstrFormats.td?rev=262725&r1=262724&r2=262725&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MicroMips32r6InstrFormats.td (original)
+++ llvm/trunk/lib/Target/Mips/MicroMips32r6InstrFormats.td Fri Mar 4 11:34:31 2016
@@ -751,7 +751,7 @@ class POOL16C_NOT16_FM_MMR6 : MicroMipsR
let Inst{3-0} = 0b0000;
}
-class POOL16C_OR16_XOR16_FM_MMR6<bits<4> op> {
+class POOL16C_OR16_XOR16_FM_MMR6<bits<4> op> : MicroMipsR6Inst16 {
bits<3> rt;
bits<3> rs;
Modified: llvm/trunk/lib/Target/Mips/MicroMips32r6InstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MicroMips32r6InstrInfo.td?rev=262725&r1=262724&r2=262725&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MicroMips32r6InstrInfo.td (original)
+++ llvm/trunk/lib/Target/Mips/MicroMips32r6InstrInfo.td Fri Mar 4 11:34:31 2016
@@ -830,7 +830,7 @@ class SDBBP16_MMR6_DESC : BrkSdbbp16MM<"
class SUBU16_MMR6_DESC : ArithRMM16<"subu16", GPRMM16Opnd, 0, II_SUBU, sub>,
MMR6Arch<"sdbbp16">, MicroMipsR6Inst16;
class XOR16_MMR6_DESC : LogicRMM16<"xor16", GPRMM16Opnd, II_XOR, xor>,
- MMR6Arch<"sdbbp16">, MicroMipsR6Inst16;
+ MMR6Arch<"sdbbp16">;
class LW_MMR6_DESC : MMR6Arch<"lw">, MipsR6Inst {
dag OutOperandList = (outs GPR32Opnd:$rt);
Modified: llvm/trunk/test/CodeGen/Mips/micromips-or16.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Mips/micromips-or16.ll?rev=262725&r1=262724&r2=262725&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/Mips/micromips-or16.ll (original)
+++ llvm/trunk/test/CodeGen/Mips/micromips-or16.ll Fri Mar 4 11:34:31 2016
@@ -1,18 +1,23 @@
; RUN: llc -march=mipsel -mcpu=mips32r2 -mattr=+micromips \
; RUN: -relocation-model=pic -O3 < %s | FileCheck %s
+; RUN: llc -O0 -march=mips -mcpu=mips32r2 -mattr=+micromips \
+; RUN: -asm-show-inst < %s | FileCheck %s
-define i32 @main() {
-entry:
- %retval = alloca i32, align 4
- %a = alloca i32, align 4
- %b = alloca i32, align 4
- %c = alloca i32, align 4
- store i32 0, i32* %retval
- %0 = load i32, i32* %b, align 4
- %1 = load i32, i32* %c, align 4
- %or = or i32 %0, %1
- store i32 %or, i32* %a, align 4
- ret i32 0
+; Branch instruction added to enable FastISel::selectOperator
+; to select OR instruction
+define i32 @f1(i32 signext %a, i32 signext %b) {
+; CHECK-LABEL: f1
+; CHECK-NOT: OR16_MMR6
+ %1 = or i32 %a, %b
+ br label %b1
+b1:
+ ret i32 %1
}
+define i32 @f2(i32 signext %a, i32 signext %b) {
+entry:
+; CHECK-LABEL: f2
; CHECK: or16
+ %0 = or i32 %a, %b
+ ret i32 %0
+}
More information about the llvm-commits
mailing list