Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Side by Side Diff: src/IceTargetLoweringMIPS32.cpp

Issue 2468133002: [SubZero] Fix code generation for vector type (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/IceInstMIPS32.cpp ('k') | tests_lit/llvm2ice_tests/vector-arg.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // 1 //
2 // The Subzero Code Generator 2 // The Subzero Code Generator
3 // 3 //
4 // This file is distributed under the University of Illinois Open Source 4 // This file is distributed under the University of Illinois Open Source
5 // License. See LICENSE.TXT for details. 5 // License. See LICENSE.TXT for details.
6 // 6 //
7 //===----------------------------------------------------------------------===// 7 //===----------------------------------------------------------------------===//
8 /// 8 ///
9 /// \file 9 /// \file
10 /// \brief Implements the TargetLoweringMIPS32 class, which consists almost 10 /// \brief Implements the TargetLoweringMIPS32 class, which consists almost
(...skipping 3229 matching lines...) Expand 10 before | Expand all | Expand 10 after
3240 } 3240 }
3241 } 3241 }
3242 3242
3243 if (Dest == nullptr) 3243 if (Dest == nullptr)
3244 return; 3244 return;
3245 3245
3246 // Assign the result of the call to Dest. 3246 // Assign the result of the call to Dest.
3247 if (ReturnReg) { 3247 if (ReturnReg) {
3248 if (RetVecFloat) { 3248 if (RetVecFloat) {
3249 auto *DestVecOn32 = llvm::cast<VariableVecOn32>(Dest); 3249 auto *DestVecOn32 = llvm::cast<VariableVecOn32>(Dest);
3250 auto *TBase = legalizeToReg(RetVecFloat);
3250 for (SizeT i = 0; i < DestVecOn32->ContainersPerVector; ++i) { 3251 for (SizeT i = 0; i < DestVecOn32->ContainersPerVector; ++i) {
3251 auto *Var = DestVecOn32->getContainers()[i]; 3252 auto *Var = DestVecOn32->getContainers()[i];
3253 auto *TVar = makeReg(IceType_i32);
3252 OperandMIPS32Mem *Mem = OperandMIPS32Mem::create( 3254 OperandMIPS32Mem *Mem = OperandMIPS32Mem::create(
3253 Func, IceType_i32, RetVecFloat, 3255 Func, IceType_i32, TBase,
3254 llvm::cast<ConstantInteger32>(Ctx->getConstantInt32(i * 4))); 3256 llvm::cast<ConstantInteger32>(Ctx->getConstantInt32(i * 4)));
3255 _lw(Var, Mem); 3257 _lw(TVar, Mem);
3258 _mov(Var, TVar);
3256 } 3259 }
3257 } else if (auto *RetVec = llvm::dyn_cast<VariableVecOn32>(ReturnReg)) { 3260 } else if (auto *RetVec = llvm::dyn_cast<VariableVecOn32>(ReturnReg)) {
3258 auto *DestVecOn32 = llvm::cast<VariableVecOn32>(Dest); 3261 auto *DestVecOn32 = llvm::cast<VariableVecOn32>(Dest);
3259 for (SizeT i = 0; i < DestVecOn32->ContainersPerVector; ++i) { 3262 for (SizeT i = 0; i < DestVecOn32->ContainersPerVector; ++i) {
3260 _mov(DestVecOn32->getContainers()[i], RetVec->getContainers()[i]); 3263 _mov(DestVecOn32->getContainers()[i], RetVec->getContainers()[i]);
3261 } 3264 }
3262 } else if (ReturnRegHi) { 3265 } else if (ReturnRegHi) {
3263 assert(Dest->getType() == IceType_i64); 3266 assert(Dest->getType() == IceType_i64);
3264 auto *Dest64On32 = llvm::cast<Variable64On32>(Dest); 3267 auto *Dest64On32 = llvm::cast<Variable64On32>(Dest);
3265 Variable *DestLo = Dest64On32->getLo(); 3268 Variable *DestLo = Dest64On32->getLo();
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
3531 Operand *Src1 = Instr->getSrc(1); 3534 Operand *Src1 = Instr->getSrc(1);
3532 if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Src1)) { 3535 if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Src1)) {
3533 const uint32_t Index = Imm->getValue(); 3536 const uint32_t Index = Imm->getValue();
3534 Variable *TDest = makeReg(DestTy); 3537 Variable *TDest = makeReg(DestTy);
3535 Variable *TReg = makeReg(DestTy); 3538 Variable *TReg = makeReg(DestTy);
3536 auto *Src0 = legalizeUndef(Instr->getSrc(0)); 3539 auto *Src0 = legalizeUndef(Instr->getSrc(0));
3537 auto *Src0R = llvm::dyn_cast<VariableVecOn32>(Src0); 3540 auto *Src0R = llvm::dyn_cast<VariableVecOn32>(Src0);
3538 // Number of elements in each container 3541 // Number of elements in each container
3539 uint32_t ElemPerCont = 3542 uint32_t ElemPerCont =
3540 typeNumElements(Src0->getType()) / Src0R->ContainersPerVector; 3543 typeNumElements(Src0->getType()) / Src0R->ContainersPerVector;
3541 auto *SrcE = Src0R->getContainers()[Index / ElemPerCont]; 3544 auto *Src = Src0R->getContainers()[Index / ElemPerCont];
3545 auto *SrcE = legalizeToReg(Src);
3542 // Position of the element in the container 3546 // Position of the element in the container
3543 uint32_t PosInCont = Index % ElemPerCont; 3547 uint32_t PosInCont = Index % ElemPerCont;
3544 if (ElemPerCont == 1) { 3548 if (ElemPerCont == 1) {
3545 _mov(TDest, SrcE); 3549 _mov(TDest, SrcE);
3546 } else if (ElemPerCont == 2) { 3550 } else if (ElemPerCont == 2) {
3547 switch (PosInCont) { 3551 switch (PosInCont) {
3548 case 0: 3552 case 0:
3549 _andi(TDest, SrcE, 0xffff); 3553 _andi(TDest, SrcE, 0xffff);
3550 break; 3554 break;
3551 case 1: 3555 case 1:
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
4043 Operand *Src2 = Instr->getSrc(2); 4047 Operand *Src2 = Instr->getSrc(2);
4044 if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Src2)) { 4048 if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Src2)) {
4045 const uint32_t Index = Imm->getValue(); 4049 const uint32_t Index = Imm->getValue();
4046 // Vector to insert in 4050 // Vector to insert in
4047 auto *Src0 = legalizeUndef(Instr->getSrc(0)); 4051 auto *Src0 = legalizeUndef(Instr->getSrc(0));
4048 auto *Src0R = llvm::dyn_cast<VariableVecOn32>(Src0); 4052 auto *Src0R = llvm::dyn_cast<VariableVecOn32>(Src0);
4049 // Number of elements in each container 4053 // Number of elements in each container
4050 uint32_t ElemPerCont = 4054 uint32_t ElemPerCont =
4051 typeNumElements(Src0->getType()) / Src0R->ContainersPerVector; 4055 typeNumElements(Src0->getType()) / Src0R->ContainersPerVector;
4052 // Source Element 4056 // Source Element
4053 auto *SrcE = Src0R->getContainers()[Index / ElemPerCont]; 4057 auto *Src = Src0R->getContainers()[Index / ElemPerCont];
4058 auto *SrcE = Src;
4059 if (ElemPerCont > 1)
4060 SrcE = legalizeToReg(Src);
4054 // Dest is a vector 4061 // Dest is a vector
4055 auto *VDest = llvm::dyn_cast<VariableVecOn32>(Dest); 4062 auto *VDest = llvm::dyn_cast<VariableVecOn32>(Dest);
4056 VDest->initVecElement(Func); 4063 VDest->initVecElement(Func);
4057 // Temp vector variable 4064 // Temp vector variable
4058 auto *TDest = makeReg(DestTy); 4065 auto *TDest = makeReg(DestTy);
4059 auto *TVDest = llvm::dyn_cast<VariableVecOn32>(TDest); 4066 auto *TVDest = llvm::dyn_cast<VariableVecOn32>(TDest);
4060 TVDest->initVecElement(Func); 4067 TVDest->initVecElement(Func);
4061 // Destination element 4068 // Destination element
4062 auto *DstE = TVDest->getContainers()[Index / ElemPerCont]; 4069 auto *DstE = TVDest->getContainers()[Index / ElemPerCont];
4063 // Element to insert 4070 // Element to insert
4064 auto *Src1R = legalizeToReg(Instr->getSrc(1)); 4071 auto *Src1R = legalizeToReg(Instr->getSrc(1));
4065 auto *TReg1 = makeReg(Src1R->getType()); 4072 auto *TReg1 = makeReg(Src1R->getType());
4066 auto *TReg2 = makeReg(Src1R->getType()); 4073 auto *TReg2 = makeReg(Src1R->getType());
4067 auto *TReg3 = makeReg(Src1R->getType()); 4074 auto *TReg3 = makeReg(Src1R->getType());
4068 auto *TReg4 = makeReg(Src1R->getType()); 4075 auto *TReg4 = makeReg(Src1R->getType());
4069 auto *TReg5 = makeReg(Src1R->getType()); 4076 auto *TReg5 = makeReg(Src1R->getType());
4077 auto *TDReg = makeReg(Src1R->getType());
4070 // Position of the element in the container 4078 // Position of the element in the container
4071 uint32_t PosInCont = Index % ElemPerCont; 4079 uint32_t PosInCont = Index % ElemPerCont;
4072 // Load source vector in a temporary vector 4080 // Load source vector in a temporary vector
4073 for (SizeT i = 0; i < TVDest->ContainersPerVector; ++i) { 4081 for (SizeT i = 0; i < TVDest->ContainersPerVector; ++i) {
4074 auto *DCont = TVDest->getContainers()[i]; 4082 auto *DCont = TVDest->getContainers()[i];
4075 // Do not define DstE as we are going to redefine it 4083 // Do not define DstE as we are going to redefine it
4076 if (DCont == DstE) 4084 if (DCont == DstE)
4077 continue; 4085 continue;
4078 auto *SCont = Src0R->getContainers()[i]; 4086 auto *SCont = Src0R->getContainers()[i];
4079 auto *TReg = makeReg(IceType_i32); 4087 auto *TReg = makeReg(IceType_i32);
4080 _mov(TReg, SCont); 4088 _mov(TReg, SCont);
4081 _mov(DCont, TReg); 4089 _mov(DCont, TReg);
4082 } 4090 }
4083 // Insert the element 4091 // Insert the element
4084 if (ElemPerCont == 1) { 4092 if (ElemPerCont == 1) {
4085 _mov(DstE, Src1R); 4093 _mov(DstE, Src1R);
4086 } else if (ElemPerCont == 2) { 4094 } else if (ElemPerCont == 2) {
4087 switch (PosInCont) { 4095 switch (PosInCont) {
4088 case 0: 4096 case 0:
4089 _andi(TReg1, Src1R, 0xffff); // Clear upper 16-bits of source 4097 _andi(TReg1, Src1R, 0xffff); // Clear upper 16-bits of source
4090 _srl(TReg2, SrcE, 16); 4098 _srl(TReg2, SrcE, 16);
4091 _sll(TReg3, TReg2, 16); // Clear lower 16-bits of element 4099 _sll(TReg3, TReg2, 16); // Clear lower 16-bits of element
4092 _or(DstE, TReg1, TReg3); 4100 _or(TDReg, TReg1, TReg3);
4101 _mov(DstE, TDReg);
4093 break; 4102 break;
4094 case 1: 4103 case 1:
4095 _sll(TReg1, Src1R, 16); // Clear lower 16-bits of source 4104 _sll(TReg1, Src1R, 16); // Clear lower 16-bits of source
4096 _sll(TReg2, SrcE, 16); 4105 _sll(TReg2, SrcE, 16);
4097 _srl(TReg3, TReg2, 16); // Clear upper 16-bits of element 4106 _srl(TReg3, TReg2, 16); // Clear upper 16-bits of element
4098 _or(DstE, TReg1, TReg3); 4107 _or(TDReg, TReg1, TReg3);
4108 _mov(DstE, TDReg);
4099 break; 4109 break;
4100 default: 4110 default:
4101 llvm::report_fatal_error("InsertElement: Invalid PosInCont"); 4111 llvm::report_fatal_error("InsertElement: Invalid PosInCont");
4102 break; 4112 break;
4103 } 4113 }
4104 } else if (ElemPerCont == 4) { 4114 } else if (ElemPerCont == 4) {
4105 switch (PosInCont) { 4115 switch (PosInCont) {
4106 case 0: 4116 case 0:
4107 _andi(TReg1, Src1R, 0xff); // Clear bits[31:8] of source 4117 _andi(TReg1, Src1R, 0xff); // Clear bits[31:8] of source
4108 _srl(TReg2, SrcE, 8); 4118 _srl(TReg2, SrcE, 8);
4109 _sll(TReg3, TReg2, 8); // Clear bits[7:0] of element 4119 _sll(TReg3, TReg2, 8); // Clear bits[7:0] of element
4110 _or(DstE, TReg1, TReg3); 4120 _or(TDReg, TReg1, TReg3);
4121 _mov(DstE, TDReg);
4111 break; 4122 break;
4112 case 1: 4123 case 1:
4113 _andi(TReg1, Src1R, 0xff); // Clear bits[31:8] of source 4124 _andi(TReg1, Src1R, 0xff); // Clear bits[31:8] of source
4114 _sll(TReg5, TReg1, 8); // Position in the destination 4125 _sll(TReg5, TReg1, 8); // Position in the destination
4115 _lui(TReg2, Ctx->getConstantInt32(0xffff)); 4126 _lui(TReg2, Ctx->getConstantInt32(0xffff));
4116 _ori(TReg3, TReg2, 0x00ff); 4127 _ori(TReg3, TReg2, 0x00ff);
4117 _and(TReg4, SrcE, TReg3); // Clear bits[15:8] of element 4128 _and(TReg4, SrcE, TReg3); // Clear bits[15:8] of element
4118 _or(DstE, TReg5, TReg4); 4129 _or(TDReg, TReg5, TReg4);
4130 _mov(DstE, TDReg);
4119 break; 4131 break;
4120 case 2: 4132 case 2:
4121 _andi(TReg1, Src1R, 0xff); // Clear bits[31:8] of source 4133 _andi(TReg1, Src1R, 0xff); // Clear bits[31:8] of source
4122 _sll(TReg5, TReg1, 16); // Position in the destination 4134 _sll(TReg5, TReg1, 16); // Position in the destination
4123 _lui(TReg2, Ctx->getConstantInt32(0xff00)); 4135 _lui(TReg2, Ctx->getConstantInt32(0xff00));
4124 _ori(TReg3, TReg2, 0xffff); 4136 _ori(TReg3, TReg2, 0xffff);
4125 _and(TReg4, SrcE, TReg3); // Clear bits[15:8] of element 4137 _and(TReg4, SrcE, TReg3); // Clear bits[15:8] of element
4126 _or(DstE, TReg5, TReg4); 4138 _or(TDReg, TReg5, TReg4);
4139 _mov(DstE, TDReg);
4127 break; 4140 break;
4128 case 3: 4141 case 3:
4129 _srl(TReg1, Src1R, 24); // Position in the destination 4142 _srl(TReg1, Src1R, 24); // Position in the destination
4130 _sll(TReg2, SrcE, 8); 4143 _sll(TReg2, SrcE, 8);
4131 _srl(TReg3, TReg2, 8); // Clear bits[31:24] of element 4144 _srl(TReg3, TReg2, 8); // Clear bits[31:24] of element
4132 _or(DstE, TReg1, TReg3); 4145 _or(TDReg, TReg1, TReg3);
4146 _mov(DstE, TDReg);
4133 break; 4147 break;
4134 default: 4148 default:
4135 llvm::report_fatal_error("InsertElement: Invalid PosInCont"); 4149 llvm::report_fatal_error("InsertElement: Invalid PosInCont");
4136 break; 4150 break;
4137 } 4151 }
4138 } 4152 }
4139 // Write back temporary vector to the destination 4153 // Write back temporary vector to the destination
4140 auto *Assign = InstAssign::create(Func, Dest, TDest); 4154 auto *Assign = InstAssign::create(Func, Dest, TDest);
4141 lowerAssign(Assign); 4155 lowerAssign(Assign);
4142 return; 4156 return;
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after
4739 Reg = R0; 4753 Reg = R0;
4740 Context.insert<InstFakeUse>(R1); 4754 Context.insert<InstFakeUse>(R1);
4741 break; 4755 break;
4742 } 4756 }
4743 case IceType_v4i1: 4757 case IceType_v4i1:
4744 case IceType_v8i1: 4758 case IceType_v8i1:
4745 case IceType_v16i1: 4759 case IceType_v16i1:
4746 case IceType_v16i8: 4760 case IceType_v16i8:
4747 case IceType_v8i16: 4761 case IceType_v8i16:
4748 case IceType_v4i32: { 4762 case IceType_v4i32: {
4749 auto *SrcVec = llvm::dyn_cast<VariableVecOn32>(Src0); 4763 auto *SrcVec = llvm::dyn_cast<VariableVecOn32>(legalizeUndef(Src0));
4750 Variable *V0 = 4764 Variable *V0 =
4751 legalizeToReg(SrcVec->getContainers()[0], RegMIPS32::Reg_V0); 4765 legalizeToReg(SrcVec->getContainers()[0], RegMIPS32::Reg_V0);
4752 Variable *V1 = 4766 Variable *V1 =
4753 legalizeToReg(SrcVec->getContainers()[1], RegMIPS32::Reg_V1); 4767 legalizeToReg(SrcVec->getContainers()[1], RegMIPS32::Reg_V1);
4754 Variable *A0 = 4768 Variable *A0 =
4755 legalizeToReg(SrcVec->getContainers()[2], RegMIPS32::Reg_A0); 4769 legalizeToReg(SrcVec->getContainers()[2], RegMIPS32::Reg_A0);
4756 Variable *A1 = 4770 Variable *A1 =
4757 legalizeToReg(SrcVec->getContainers()[3], RegMIPS32::Reg_A1); 4771 legalizeToReg(SrcVec->getContainers()[3], RegMIPS32::Reg_A1);
4758 Reg = V0; 4772 Reg = V0;
4759 Context.insert<InstFakeUse>(V1); 4773 Context.insert<InstFakeUse>(V1);
4760 Context.insert<InstFakeUse>(A0); 4774 Context.insert<InstFakeUse>(A0);
4761 Context.insert<InstFakeUse>(A1); 4775 Context.insert<InstFakeUse>(A1);
4762 break; 4776 break;
4763 } 4777 }
4764 case IceType_v4f32: { 4778 case IceType_v4f32: {
4765 auto *SrcVec = llvm::dyn_cast<VariableVecOn32>(Src0); 4779 auto *SrcVec = llvm::dyn_cast<VariableVecOn32>(legalizeUndef(Src0));
4766 Reg = getImplicitRet(); 4780 Reg = getImplicitRet();
4767 auto *RegT = legalizeToReg(Reg); 4781 auto *RegT = legalizeToReg(Reg);
4768 // Return the vector through buffer in implicit argument a0 4782 // Return the vector through buffer in implicit argument a0
4769 for (SizeT i = 0; i < SrcVec->ContainersPerVector; ++i) { 4783 for (SizeT i = 0; i < SrcVec->ContainersPerVector; ++i) {
4770 OperandMIPS32Mem *Mem = OperandMIPS32Mem::create( 4784 OperandMIPS32Mem *Mem = OperandMIPS32Mem::create(
4771 Func, IceType_f32, RegT, 4785 Func, IceType_f32, RegT,
4772 llvm::cast<ConstantInteger32>(Ctx->getConstantInt32(i * 4))); 4786 llvm::cast<ConstantInteger32>(Ctx->getConstantInt32(i * 4)));
4773 Variable *Var = legalizeToReg(SrcVec->getContainers()[i]); 4787 Variable *Var = legalizeToReg(SrcVec->getContainers()[i]);
4774 _sw(Var, Mem); 4788 _sw(Var, Mem);
4775 } 4789 }
(...skipping 23 matching lines...) Expand all
4799 Variable *DestR = nullptr; 4813 Variable *DestR = nullptr;
4800 Variable *DestHiR = nullptr; 4814 Variable *DestHiR = nullptr;
4801 Variable *SrcTR = nullptr; 4815 Variable *SrcTR = nullptr;
4802 Variable *SrcTHiR = nullptr; 4816 Variable *SrcTHiR = nullptr;
4803 Variable *SrcFR = nullptr; 4817 Variable *SrcFR = nullptr;
4804 Variable *SrcFHiR = nullptr; 4818 Variable *SrcFHiR = nullptr;
4805 4819
4806 if (DestTy == IceType_i64) { 4820 if (DestTy == IceType_i64) {
4807 DestR = llvm::cast<Variable>(loOperand(Dest)); 4821 DestR = llvm::cast<Variable>(loOperand(Dest));
4808 DestHiR = llvm::cast<Variable>(hiOperand(Dest)); 4822 DestHiR = llvm::cast<Variable>(hiOperand(Dest));
4809 SrcTR = legalizeToReg(loOperand(Instr->getTrueOperand())); 4823 SrcTR = legalizeToReg(loOperand(legalizeUndef(Instr->getTrueOperand())));
4810 SrcTHiR = legalizeToReg(hiOperand(Instr->getTrueOperand())); 4824 SrcTHiR = legalizeToReg(hiOperand(legalizeUndef(Instr->getTrueOperand())));
4811 SrcFR = legalizeToReg(loOperand(Instr->getFalseOperand())); 4825 SrcFR = legalizeToReg(loOperand(legalizeUndef(Instr->getFalseOperand())));
4812 SrcFHiR = legalizeToReg(hiOperand(Instr->getFalseOperand())); 4826 SrcFHiR = legalizeToReg(hiOperand(legalizeUndef(Instr->getFalseOperand())));
4813 } else { 4827 } else {
4814 SrcTR = legalizeToReg(Instr->getTrueOperand()); 4828 SrcTR = legalizeToReg(legalizeUndef(Instr->getTrueOperand()));
4815 SrcFR = legalizeToReg(Instr->getFalseOperand()); 4829 SrcFR = legalizeToReg(legalizeUndef(Instr->getFalseOperand()));
4816 } 4830 }
4817 4831
4818 Variable *ConditionR = legalizeToReg(Instr->getCondition()); 4832 Variable *ConditionR = legalizeToReg(Instr->getCondition());
4819 4833
4820 assert(Instr->getCondition()->getType() == IceType_i1); 4834 assert(Instr->getCondition()->getType() == IceType_i1);
4821 4835
4822 switch (DestTy) { 4836 switch (DestTy) {
4823 case IceType_i1: 4837 case IceType_i1:
4824 case IceType_i8: 4838 case IceType_i8:
4825 case IceType_i16: 4839 case IceType_i16:
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
5332 Str << "\t.set\t" 5346 Str << "\t.set\t"
5333 << "noat\n"; 5347 << "noat\n";
5334 } 5348 }
5335 5349
5336 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; 5350 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM];
5337 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; 5351 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM];
5338 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; 5352 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM];
5339 5353
5340 } // end of namespace MIPS32 5354 } // end of namespace MIPS32
5341 } // end of namespace Ice 5355 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceInstMIPS32.cpp ('k') | tests_lit/llvm2ice_tests/vector-arg.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698