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

Side by Side Diff: src/IceTargetLoweringMIPS32.cpp

Issue 2022063003: [Subzero][MIPS32] Implement icmp operation for i8, i16 operands (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addressed review comments Created 4 years, 6 months 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 | « no previous file | tests_lit/llvm2ice_tests/icmp.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 1139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 return; 1150 return;
1151 } 1151 }
1152 Variable *Dest = Instr->getDest(); 1152 Variable *Dest = Instr->getDest();
1153 if (isVectorType(Dest->getType())) { 1153 if (isVectorType(Dest->getType())) {
1154 UnimplementedLoweringError(this, Instr); 1154 UnimplementedLoweringError(this, Instr);
1155 return; 1155 return;
1156 } 1156 }
1157 InstIcmp::ICond Cond = Instr->getCondition(); 1157 InstIcmp::ICond Cond = Instr->getCondition();
1158 auto *Src0R = legalizeToReg(Src0); 1158 auto *Src0R = legalizeToReg(Src0);
1159 auto *Src1R = legalizeToReg(Src1); 1159 auto *Src1R = legalizeToReg(Src1);
1160 const Type Src0Ty = Src0R->getType();
1161 const uint32_t ShAmt = INT32_BITS - getScalarIntBitWidth(Src0->getType());
1162 Variable *Src0RT = I32Reg();
1163 Variable *Src1RT = I32Reg();
1164
1165 if (Src0Ty != IceType_i32) {
1166 _sll(Src0RT, Src0R, ShAmt);
1167 _sll(Src1RT, Src1R, ShAmt);
1168 } else {
1169 _mov(Src0RT, Src0R);
1170 _mov(Src1RT, Src1R);
1171 }
1172
1160 switch (Cond) { 1173 switch (Cond) {
1161 case InstIcmp::Eq: { 1174 case InstIcmp::Eq: {
1162 auto *DestT = I32Reg(); 1175 auto *DestT = I32Reg();
1163 auto *T = I32Reg(); 1176 auto *T = I32Reg();
1164 _xor(T, Src0R, Src1R); 1177 _xor(T, Src0RT, Src1RT);
1165 _sltiu(DestT, T, 1); 1178 _sltiu(DestT, T, 1);
1166 _mov(Dest, DestT); 1179 _mov(Dest, DestT);
1167 return; 1180 return;
1168 } 1181 }
1169 case InstIcmp::Ne: { 1182 case InstIcmp::Ne: {
1170 auto *DestT = I32Reg(); 1183 auto *DestT = I32Reg();
1171 auto *T = I32Reg(); 1184 auto *T = I32Reg();
1172 auto *Zero = getZero(); 1185 auto *Zero = getZero();
1173 _xor(T, Src0R, Src1R); 1186 _xor(T, Src0RT, Src1RT);
1174 _sltu(DestT, Zero, T); 1187 _sltu(DestT, Zero, T);
1175 _mov(Dest, DestT); 1188 _mov(Dest, DestT);
1176 return; 1189 return;
1177 } 1190 }
1178 case InstIcmp::Ugt: { 1191 case InstIcmp::Ugt: {
1179 auto *DestT = I32Reg(); 1192 auto *DestT = I32Reg();
1180 _sltu(DestT, Src1R, Src0R); 1193 _sltu(DestT, Src1RT, Src0RT);
1181 _mov(Dest, DestT); 1194 _mov(Dest, DestT);
1182 return; 1195 return;
1183 } 1196 }
1184 case InstIcmp::Uge: { 1197 case InstIcmp::Uge: {
1185 auto *DestT = I32Reg(); 1198 auto *DestT = I32Reg();
1186 auto *T = I32Reg(); 1199 auto *T = I32Reg();
1187 _sltu(T, Src0R, Src1R); 1200 _sltu(T, Src0RT, Src1RT);
1188 _xori(DestT, T, 1); 1201 _xori(DestT, T, 1);
1189 _mov(Dest, DestT); 1202 _mov(Dest, DestT);
1190 return; 1203 return;
1191 } 1204 }
1192 case InstIcmp::Ult: { 1205 case InstIcmp::Ult: {
1193 auto *DestT = I32Reg(); 1206 auto *DestT = I32Reg();
1194 _sltu(DestT, Src0R, Src1R); 1207 _sltu(DestT, Src0RT, Src1RT);
1195 _mov(Dest, DestT); 1208 _mov(Dest, DestT);
1196 return; 1209 return;
1197 } 1210 }
1198 case InstIcmp::Ule: { 1211 case InstIcmp::Ule: {
1199 auto *DestT = I32Reg(); 1212 auto *DestT = I32Reg();
1200 auto *T = I32Reg(); 1213 auto *T = I32Reg();
1201 _sltu(T, Src1R, Src0R); 1214 _sltu(T, Src1RT, Src0RT);
1202 _xori(DestT, T, 1); 1215 _xori(DestT, T, 1);
1203 _mov(Dest, DestT); 1216 _mov(Dest, DestT);
1204 return; 1217 return;
1205 } 1218 }
1206 case InstIcmp::Sgt: { 1219 case InstIcmp::Sgt: {
1207 auto *DestT = I32Reg(); 1220 auto *DestT = I32Reg();
1208 _slt(DestT, Src1R, Src0R); 1221 _slt(DestT, Src1RT, Src0RT);
1209 _mov(Dest, DestT); 1222 _mov(Dest, DestT);
1210 return; 1223 return;
1211 } 1224 }
1212 case InstIcmp::Sge: { 1225 case InstIcmp::Sge: {
1213 auto *DestT = I32Reg(); 1226 auto *DestT = I32Reg();
1214 auto *T = I32Reg(); 1227 auto *T = I32Reg();
1215 _slt(T, Src0R, Src1R); 1228 _slt(T, Src0RT, Src1RT);
1216 _xori(DestT, T, 1); 1229 _xori(DestT, T, 1);
1217 _mov(Dest, DestT); 1230 _mov(Dest, DestT);
1218 return; 1231 return;
1219 } 1232 }
1220 case InstIcmp::Slt: { 1233 case InstIcmp::Slt: {
1221 auto *DestT = I32Reg(); 1234 auto *DestT = I32Reg();
1222 _slt(DestT, Src0R, Src1R); 1235 _slt(DestT, Src0RT, Src1RT);
1223 _mov(Dest, DestT); 1236 _mov(Dest, DestT);
1224 return; 1237 return;
1225 } 1238 }
1226 case InstIcmp::Sle: { 1239 case InstIcmp::Sle: {
1227 auto *DestT = I32Reg(); 1240 auto *DestT = I32Reg();
1228 auto *T = I32Reg(); 1241 auto *T = I32Reg();
1229 _slt(T, Src1R, Src0R); 1242 _slt(T, Src1RT, Src0RT);
1230 _xori(DestT, T, 1); 1243 _xori(DestT, T, 1);
1231 _mov(Dest, DestT); 1244 _mov(Dest, DestT);
1232 return; 1245 return;
1233 } 1246 }
1234 default: 1247 default:
1235 llvm_unreachable("Invalid ICmp operator"); 1248 llvm_unreachable("Invalid ICmp operator");
1236 return; 1249 return;
1237 } 1250 }
1238 } 1251 }
1239 1252
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
1668 Str << "\t.set\t" 1681 Str << "\t.set\t"
1669 << "nomips16\n"; 1682 << "nomips16\n";
1670 } 1683 }
1671 1684
1672 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM]; 1685 SmallBitVector TargetMIPS32::TypeToRegisterSet[RCMIPS32_NUM];
1673 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; 1686 SmallBitVector TargetMIPS32::TypeToRegisterSetUnfiltered[RCMIPS32_NUM];
1674 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM]; 1687 SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM];
1675 1688
1676 } // end of namespace MIPS32 1689 } // end of namespace MIPS32
1677 } // end of namespace Ice 1690 } // end of namespace Ice
OLDNEW
« no previous file with comments | « no previous file | tests_lit/llvm2ice_tests/icmp.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698