For extended loads of type i1 to i8, we will need to at least one byte from memory.
authorSanjiv Gupta <sanjiv.gupta@microchip.com>
Fri, 3 Jul 2009 07:58:59 +0000 (07:58 +0000)
committerSanjiv Gupta <sanjiv.gupta@microchip.com>
Fri, 3 Jul 2009 07:58:59 +0000 (07:58 +0000)
The change in the .td file is to mark the side effects of mov insn.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74768 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PIC16/PIC16ISelLowering.cpp
lib/Target/PIC16/PIC16InstrInfo.td

index 3bb0164949a4bd2aba30bc6e1ae5c00707f9cd00..0d24f61c49a83ad36e5d7f1b38aac9ca47b29baf 100644 (file)
@@ -841,12 +841,16 @@ SDValue PIC16TargetLowering::ExpandLoad(SDNode *N, SelectionDAG &DAG) {
     // i.e. without any extension
     MVT MemVT = LD->getMemoryVT();
     unsigned MemBytes = MemVT.getSizeInBits() / 8;
+    // if MVT::i1 is extended to MVT::i8 then MemBytes will be zero
+    // So set it to one
+    if (MemBytes == 0) MemBytes = 1;
+    
     unsigned ExtdBytes = VT.getSizeInBits() / 8;
     Offset = DAG.getConstant(LoadOffset, MVT::i8);
 
     Tys = DAG.getVTList(MVT::i8, MVT::Other); 
     // For MemBytes generate PIC16Load with proper offset
-    for (iter=0; iter<MemBytes; ++iter) {
+    for (iter=0; iter < MemBytes; ++iter) {
       // Add the pointer offset if any
       Offset = DAG.getConstant(iter + LoadOffset, MVT::i8);
       Load = DAG.getNode(PIC16ISD::PIC16Load, dl, Tys, Chain, PtrLo, PtrHi,
index 75577163c87f1431996c2a7f6b857bde5b4c9768..a054bdcbe3c3d645cbad49d301d7b2df9f1eb2c0 100644 (file)
@@ -299,7 +299,7 @@ def store_indirect :
 // Direct load.
 // Input Operands are: ptrlo = GA, offset = offset, ptrhi = banksel.
 // Output: dst = W
-let mayLoad = 1 in
+let Defs = [STATUS], mayLoad = 1 in
 class MOVF_INSN<bits<6> OpCode, SDNode OpNodeSrc, SDNode Op>:
   ByteFormat<0, (outs GPR:$dst), 
              (ins i8imm:$offset, i8mem:$ptrlo, i8imm:$ptrhi),