diff options
| author | Duraid Madina <duraid@octopus.com.au> | 2006-01-13 10:28:25 +0000 |
|---|---|---|
| committer | Duraid Madina <duraid@octopus.com.au> | 2006-01-13 10:28:25 +0000 |
| commit | 0b94324c5ebbbe12f7a7717235cbfcac96b818f1 (patch) | |
| tree | 6fac98e36ad1977855e3d79153464db964772e1d | |
| parent | b32664583ba409c84dccaee30a11cd1ace95e0ff (diff) | |
| download | bcm5719-llvm-0b94324c5ebbbe12f7a7717235cbfcac96b818f1.tar.gz bcm5719-llvm-0b94324c5ebbbe12f7a7717235cbfcac96b818f1.zip | |
don't be a doofus - this fixes storing bools
llvm-svn: 25274
| -rw-r--r-- | llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp b/llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp index 41ae9935573..f8827ea06b8 100644 --- a/llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp +++ b/llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp @@ -571,9 +571,12 @@ SDOperand IA64DAGToDAGISel::Select(SDOperand Op) { default: assert(0 && "unknown type in store"); case MVT::i1: { // this is a bool Opc = IA64::ST1; // we store either 0 or 1 as a byte + // first load zero! + SDOperand Initial = CurDAG->getCopyFromReg(Chain, IA64::r0, MVT::i64); + Chain = Initial.getValue(1); + // then load 1 iff the predicate to store is 1 SDOperand Tmp = - CurDAG->getTargetNode(IA64::PADDS, MVT::i64, - CurDAG->getRegister(IA64::r0, MVT::i64), + CurDAG->getTargetNode(IA64::PADDS, MVT::i64, Initial, CurDAG->getConstant(1, MVT::i64), Select(N->getOperand(1))); return CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, Chain); |

