@@ -1713,62 +1713,57 @@ bool NVPTXDAGToDAGISel::tryStoreParam(SDNode *N) {
1713
1713
// If we have an i1, use an 8-bit store. The lowering code in
1714
1714
// NVPTXISelLowering will have already emitted an upcast.
1715
1715
std::optional<unsigned > Opcode;
1716
- switch (N-> getOpcode () ) {
1716
+ switch (NumElts ) {
1717
1717
default :
1718
- switch (NumElts) {
1719
- default :
1720
- llvm_unreachable (" Unexpected NumElts" );
1721
- case 1 : {
1722
- MVT::SimpleValueType MemTy = Mem->getMemoryVT ().getSimpleVT ().SimpleTy ;
1723
- SDValue Imm = Ops[0 ];
1724
- if (MemTy != MVT::f16 && MemTy != MVT::bf16 &&
1725
- (isa<ConstantSDNode>(Imm) || isa<ConstantFPSDNode>(Imm))) {
1726
- // Convert immediate to target constant
1727
- if (MemTy == MVT::f32 || MemTy == MVT::f64 ) {
1728
- const ConstantFPSDNode *ConstImm = cast<ConstantFPSDNode>(Imm);
1729
- const ConstantFP *CF = ConstImm->getConstantFPValue ();
1730
- Imm = CurDAG->getTargetConstantFP (*CF, DL, Imm->getValueType (0 ));
1731
- } else {
1732
- const ConstantSDNode *ConstImm = cast<ConstantSDNode>(Imm);
1733
- const ConstantInt *CI = ConstImm->getConstantIntValue ();
1734
- Imm = CurDAG->getTargetConstant (*CI, DL, Imm->getValueType (0 ));
1735
- }
1736
- Ops[0 ] = Imm;
1737
- // Use immediate version of store param
1738
- Opcode = pickOpcodeForVT (MemTy, NVPTX::StoreParamI8_i,
1739
- NVPTX::StoreParamI16_i, NVPTX::StoreParamI32_i,
1740
- NVPTX::StoreParamI64_i);
1741
- } else
1742
- Opcode =
1743
- pickOpcodeForVT (Mem->getMemoryVT ().getSimpleVT ().SimpleTy ,
1744
- NVPTX::StoreParamI8_r, NVPTX::StoreParamI16_r,
1745
- NVPTX::StoreParamI32_r, NVPTX::StoreParamI64_r);
1746
- if (Opcode == NVPTX::StoreParamI8_r) {
1747
- // Fine tune the opcode depending on the size of the operand.
1748
- // This helps to avoid creating redundant COPY instructions in
1749
- // InstrEmitter::AddRegisterOperand().
1750
- switch (Ops[0 ].getSimpleValueType ().SimpleTy ) {
1751
- default :
1752
- break ;
1753
- case MVT::i32 :
1754
- Opcode = NVPTX::StoreParamI8TruncI32_r;
1755
- break ;
1756
- case MVT::i64 :
1757
- Opcode = NVPTX::StoreParamI8TruncI64_r;
1758
- break ;
1759
- }
1718
+ llvm_unreachable (" Unexpected NumElts" );
1719
+ case 1 : {
1720
+ MVT::SimpleValueType MemTy = Mem->getMemoryVT ().getSimpleVT ().SimpleTy ;
1721
+ SDValue Imm = Ops[0 ];
1722
+ if (MemTy != MVT::f16 && MemTy != MVT::bf16 &&
1723
+ (isa<ConstantSDNode>(Imm) || isa<ConstantFPSDNode>(Imm))) {
1724
+ // Convert immediate to target constant
1725
+ if (MemTy == MVT::f32 || MemTy == MVT::f64 ) {
1726
+ const ConstantFPSDNode *ConstImm = cast<ConstantFPSDNode>(Imm);
1727
+ const ConstantFP *CF = ConstImm->getConstantFPValue ();
1728
+ Imm = CurDAG->getTargetConstantFP (*CF, DL, Imm->getValueType (0 ));
1729
+ } else {
1730
+ const ConstantSDNode *ConstImm = cast<ConstantSDNode>(Imm);
1731
+ const ConstantInt *CI = ConstImm->getConstantIntValue ();
1732
+ Imm = CurDAG->getTargetConstant (*CI, DL, Imm->getValueType (0 ));
1733
+ }
1734
+ Ops[0 ] = Imm;
1735
+ // Use immediate version of store param
1736
+ Opcode =
1737
+ pickOpcodeForVT (MemTy, NVPTX::StoreParamI8_i, NVPTX::StoreParamI16_i,
1738
+ NVPTX::StoreParamI32_i, NVPTX::StoreParamI64_i);
1739
+ } else
1740
+ Opcode = pickOpcodeForVT (Mem->getMemoryVT ().getSimpleVT ().SimpleTy ,
1741
+ NVPTX::StoreParamI8_r, NVPTX::StoreParamI16_r,
1742
+ NVPTX::StoreParamI32_r, NVPTX::StoreParamI64_r);
1743
+ if (Opcode == NVPTX::StoreParamI8_r) {
1744
+ // Fine tune the opcode depending on the size of the operand.
1745
+ // This helps to avoid creating redundant COPY instructions in
1746
+ // InstrEmitter::AddRegisterOperand().
1747
+ switch (Ops[0 ].getSimpleValueType ().SimpleTy ) {
1748
+ default :
1749
+ break ;
1750
+ case MVT::i32 :
1751
+ Opcode = NVPTX::StoreParamI8TruncI32_r;
1752
+ break ;
1753
+ case MVT::i64 :
1754
+ Opcode = NVPTX::StoreParamI8TruncI64_r;
1755
+ break ;
1760
1756
}
1761
- break ;
1762
- }
1763
- case 2 :
1764
- case 4 : {
1765
- MVT::SimpleValueType MemTy = Mem->getMemoryVT ().getSimpleVT ().SimpleTy ;
1766
- Opcode = pickOpcodeForVectorStParam (Ops, NumElts, MemTy, CurDAG, DL);
1767
- break ;
1768
- }
1769
1757
}
1770
1758
break ;
1771
1759
}
1760
+ case 2 :
1761
+ case 4 : {
1762
+ MVT::SimpleValueType MemTy = Mem->getMemoryVT ().getSimpleVT ().SimpleTy ;
1763
+ Opcode = pickOpcodeForVectorStParam (Ops, NumElts, MemTy, CurDAG, DL);
1764
+ break ;
1765
+ }
1766
+ }
1772
1767
1773
1768
SDVTList RetVTs = CurDAG->getVTList (MVT::Other, MVT::Glue);
1774
1769
SDNode *Ret = CurDAG->getMachineNode (*Opcode, DL, RetVTs, Ops);
0 commit comments