diff options
author | Sanjiv Gupta <sanjiv.gupta@microchip.com> | 2009-07-27 02:26:06 +0000 |
---|---|---|
committer | Sanjiv Gupta <sanjiv.gupta@microchip.com> | 2009-07-27 02:26:06 +0000 |
commit | bf36cafb8c3866cde3a642377f364eddd963aa66 (patch) | |
tree | 7b9be8db46b4309f937b461459dd1c3e14a5ce9f /lib/Target | |
parent | 08b93c6a70ae59af375f205cfcffeaa3517577ab (diff) | |
download | external_llvm-bf36cafb8c3866cde3a642377f364eddd963aa66.zip external_llvm-bf36cafb8c3866cde3a642377f364eddd963aa66.tar.gz external_llvm-bf36cafb8c3866cde3a642377f364eddd963aa66.tar.bz2 |
fixed incorrect lowering of ISD::SUB node. SUB has only one result value.
It wasn't caught during tests because we never got a sub generated, (i8 was always getting promoted to int, which in turn was broken into subc/sube). Though the optimizer leaves an i8 sub now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77178 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/PIC16/PIC16ISelLowering.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/Target/PIC16/PIC16ISelLowering.cpp b/lib/Target/PIC16/PIC16ISelLowering.cpp index 8f59512..5949b7b 100644 --- a/lib/Target/PIC16/PIC16ISelLowering.cpp +++ b/lib/Target/PIC16/PIC16ISelLowering.cpp @@ -1573,11 +1573,20 @@ SDValue PIC16TargetLowering::LowerSUB(SDValue Op, SelectionDAG &DAG) { SDValue NewVal = ConvertToMemOperand (Op.getOperand(0), DAG, dl); SDVTList Tys = DAG.getVTList(MVT::i8, MVT::Flag); - if (Op.getOpcode() == ISD::SUBE) - return DAG.getNode(Op.getOpcode(), dl, Tys, NewVal, Op.getOperand(1), - Op.getOperand(2)); - else - return DAG.getNode(Op.getOpcode(), dl, Tys, NewVal, Op.getOperand(1)); + switch (Op.getOpcode()) { + case ISD::SUBE: + return DAG.getNode(Op.getOpcode(), dl, Tys, NewVal, Op.getOperand(1), + Op.getOperand(2)); + break; + case ISD::SUBC: + return DAG.getNode(Op.getOpcode(), dl, Tys, NewVal, Op.getOperand(1)); + break; + case ISD::SUB: + return DAG.getNode(Op.getOpcode(), dl, MVT::i8, NewVal, Op.getOperand(1)); + break; + default: + assert (0 && "Opcode unknown."); + } } void PIC16TargetLowering::InitReservedFrameCount(const Function *F) { |