Lines Matching full:loongarch
32 #include "LoongArch.h"
42 #define DEBUG_TYPE "loongarch-opt-w-instrs"
43 #define LOONGARCH_OPT_W_INSTRS_NAME "LoongArch Optimize W Instructions"
50 DisableSExtWRemoval("loongarch-disable-sextw-removal",
54 DisableCvtToDSuffix("loongarch-disable-cvt-to-d-suffix",
132 case LoongArch::ADD_W: in hasAllNBitUsers()
133 case LoongArch::ADDI_W: in hasAllNBitUsers()
134 case LoongArch::SUB_W: in hasAllNBitUsers()
135 case LoongArch::ALSL_W: in hasAllNBitUsers()
136 case LoongArch::ALSL_WU: in hasAllNBitUsers()
137 case LoongArch::MUL_W: in hasAllNBitUsers()
138 case LoongArch::MULH_W: in hasAllNBitUsers()
139 case LoongArch::MULH_WU: in hasAllNBitUsers()
140 case LoongArch::MULW_D_W: in hasAllNBitUsers()
141 case LoongArch::MULW_D_WU: in hasAllNBitUsers()
143 // case LoongArch::DIV_W: in hasAllNBitUsers()
144 // case LoongArch::DIV_WU: in hasAllNBitUsers()
145 // case LoongArch::MOD_W: in hasAllNBitUsers()
146 // case LoongArch::MOD_WU: in hasAllNBitUsers()
147 case LoongArch::SLL_W: in hasAllNBitUsers()
148 case LoongArch::SLLI_W: in hasAllNBitUsers()
149 case LoongArch::SRL_W: in hasAllNBitUsers()
150 case LoongArch::SRLI_W: in hasAllNBitUsers()
151 case LoongArch::SRA_W: in hasAllNBitUsers()
152 case LoongArch::SRAI_W: in hasAllNBitUsers()
153 case LoongArch::ROTR_W: in hasAllNBitUsers()
154 case LoongArch::ROTRI_W: in hasAllNBitUsers()
155 case LoongArch::CLO_W: in hasAllNBitUsers()
156 case LoongArch::CLZ_W: in hasAllNBitUsers()
157 case LoongArch::CTO_W: in hasAllNBitUsers()
158 case LoongArch::CTZ_W: in hasAllNBitUsers()
159 case LoongArch::BYTEPICK_W: in hasAllNBitUsers()
160 case LoongArch::REVB_2H: in hasAllNBitUsers()
161 case LoongArch::BITREV_4B: in hasAllNBitUsers()
162 case LoongArch::BITREV_W: in hasAllNBitUsers()
163 case LoongArch::BSTRINS_W: in hasAllNBitUsers()
164 case LoongArch::BSTRPICK_W: in hasAllNBitUsers()
165 case LoongArch::CRC_W_W_W: in hasAllNBitUsers()
166 case LoongArch::CRCC_W_W_W: in hasAllNBitUsers()
167 case LoongArch::MOVGR2FCSR: in hasAllNBitUsers()
168 case LoongArch::MOVGR2FRH_W: in hasAllNBitUsers()
169 case LoongArch::MOVGR2FR_W_64: in hasAllNBitUsers()
173 case LoongArch::MOVGR2CF: in hasAllNBitUsers()
177 case LoongArch::EXT_W_B: in hasAllNBitUsers()
181 case LoongArch::EXT_W_H: in hasAllNBitUsers()
186 case LoongArch::SRLI_D: { in hasAllNBitUsers()
200 case LoongArch::SLLI_D: in hasAllNBitUsers()
205 case LoongArch::ANDI: { in hasAllNBitUsers()
212 case LoongArch::ORI: { in hasAllNBitUsers()
220 case LoongArch::SLL_D: in hasAllNBitUsers()
230 case LoongArch::SRA_D: in hasAllNBitUsers()
231 case LoongArch::SRL_D: in hasAllNBitUsers()
232 case LoongArch::ROTR_D: in hasAllNBitUsers()
238 case LoongArch::ST_B: in hasAllNBitUsers()
239 case LoongArch::STX_B: in hasAllNBitUsers()
240 case LoongArch::STGT_B: in hasAllNBitUsers()
241 case LoongArch::STLE_B: in hasAllNBitUsers()
242 case LoongArch::IOCSRWR_B: in hasAllNBitUsers()
247 case LoongArch::ST_H: in hasAllNBitUsers()
248 case LoongArch::STX_H: in hasAllNBitUsers()
249 case LoongArch::STGT_H: in hasAllNBitUsers()
250 case LoongArch::STLE_H: in hasAllNBitUsers()
251 case LoongArch::IOCSRWR_H: in hasAllNBitUsers()
256 case LoongArch::ST_W: in hasAllNBitUsers()
257 case LoongArch::STX_W: in hasAllNBitUsers()
258 case LoongArch::SCREL_W: in hasAllNBitUsers()
259 case LoongArch::STPTR_W: in hasAllNBitUsers()
260 case LoongArch::STGT_W: in hasAllNBitUsers()
261 case LoongArch::STLE_W: in hasAllNBitUsers()
262 case LoongArch::IOCSRWR_W: in hasAllNBitUsers()
268 case LoongArch::CRC_W_B_W: in hasAllNBitUsers()
269 case LoongArch::CRCC_W_B_W: in hasAllNBitUsers()
273 case LoongArch::CRC_W_H_W: in hasAllNBitUsers()
274 case LoongArch::CRCC_W_H_W: in hasAllNBitUsers()
278 case LoongArch::CRC_W_D_W: in hasAllNBitUsers()
279 case LoongArch::CRCC_W_D_W: in hasAllNBitUsers()
286 case LoongArch::COPY: in hasAllNBitUsers()
287 case LoongArch::PHI: in hasAllNBitUsers()
288 case LoongArch::ADD_D: in hasAllNBitUsers()
289 case LoongArch::ADDI_D: in hasAllNBitUsers()
290 case LoongArch::SUB_D: in hasAllNBitUsers()
291 case LoongArch::MUL_D: in hasAllNBitUsers()
292 case LoongArch::AND: in hasAllNBitUsers()
293 case LoongArch::OR: in hasAllNBitUsers()
294 case LoongArch::NOR: in hasAllNBitUsers()
295 case LoongArch::XOR: in hasAllNBitUsers()
296 case LoongArch::XORI: in hasAllNBitUsers()
297 case LoongArch::ANDN: in hasAllNBitUsers()
298 case LoongArch::ORN: in hasAllNBitUsers()
302 case LoongArch::MASKNEZ: in hasAllNBitUsers()
303 case LoongArch::MASKEQZ: in hasAllNBitUsers()
327 case LoongArch::ADD_W: in isSignExtendingOpW()
328 case LoongArch::SUB_W: in isSignExtendingOpW()
329 case LoongArch::ADDI_W: in isSignExtendingOpW()
330 case LoongArch::ALSL_W: in isSignExtendingOpW()
331 case LoongArch::LU12I_W: in isSignExtendingOpW()
332 case LoongArch::SLT: in isSignExtendingOpW()
333 case LoongArch::SLTU: in isSignExtendingOpW()
334 case LoongArch::SLTI: in isSignExtendingOpW()
335 case LoongArch::SLTUI: in isSignExtendingOpW()
336 case LoongArch::ANDI: in isSignExtendingOpW()
337 case LoongArch::MUL_W: in isSignExtendingOpW()
338 case LoongArch::MULH_W: in isSignExtendingOpW()
339 case LoongArch::MULH_WU: in isSignExtendingOpW()
340 case LoongArch::DIV_W: in isSignExtendingOpW()
341 case LoongArch::MOD_W: in isSignExtendingOpW()
342 case LoongArch::DIV_WU: in isSignExtendingOpW()
343 case LoongArch::MOD_WU: in isSignExtendingOpW()
344 case LoongArch::SLL_W: in isSignExtendingOpW()
345 case LoongArch::SRL_W: in isSignExtendingOpW()
346 case LoongArch::SRA_W: in isSignExtendingOpW()
347 case LoongArch::ROTR_W: in isSignExtendingOpW()
348 case LoongArch::SLLI_W: in isSignExtendingOpW()
349 case LoongArch::SRLI_W: in isSignExtendingOpW()
350 case LoongArch::SRAI_W: in isSignExtendingOpW()
351 case LoongArch::ROTRI_W: in isSignExtendingOpW()
352 case LoongArch::EXT_W_B: in isSignExtendingOpW()
353 case LoongArch::EXT_W_H: in isSignExtendingOpW()
354 case LoongArch::CLO_W: in isSignExtendingOpW()
355 case LoongArch::CLZ_W: in isSignExtendingOpW()
356 case LoongArch::CTO_W: in isSignExtendingOpW()
357 case LoongArch::CTZ_W: in isSignExtendingOpW()
358 case LoongArch::BYTEPICK_W: in isSignExtendingOpW()
359 case LoongArch::REVB_2H: in isSignExtendingOpW()
360 case LoongArch::BITREV_4B: in isSignExtendingOpW()
361 case LoongArch::BITREV_W: in isSignExtendingOpW()
362 case LoongArch::BSTRINS_W: in isSignExtendingOpW()
363 case LoongArch::BSTRPICK_W: in isSignExtendingOpW()
364 case LoongArch::LD_B: in isSignExtendingOpW()
365 case LoongArch::LD_H: in isSignExtendingOpW()
366 case LoongArch::LD_W: in isSignExtendingOpW()
367 case LoongArch::LD_BU: in isSignExtendingOpW()
368 case LoongArch::LD_HU: in isSignExtendingOpW()
369 case LoongArch::LL_W: in isSignExtendingOpW()
370 case LoongArch::LLACQ_W: in isSignExtendingOpW()
371 case LoongArch::RDTIMEL_W: in isSignExtendingOpW()
372 case LoongArch::RDTIMEH_W: in isSignExtendingOpW()
373 case LoongArch::CPUCFG: in isSignExtendingOpW()
374 case LoongArch::LDX_B: in isSignExtendingOpW()
375 case LoongArch::LDX_H: in isSignExtendingOpW()
376 case LoongArch::LDX_W: in isSignExtendingOpW()
377 case LoongArch::LDX_BU: in isSignExtendingOpW()
378 case LoongArch::LDX_HU: in isSignExtendingOpW()
379 case LoongArch::LDPTR_W: in isSignExtendingOpW()
380 case LoongArch::LDGT_B: in isSignExtendingOpW()
381 case LoongArch::LDGT_H: in isSignExtendingOpW()
382 case LoongArch::LDGT_W: in isSignExtendingOpW()
383 case LoongArch::LDLE_B: in isSignExtendingOpW()
384 case LoongArch::LDLE_H: in isSignExtendingOpW()
385 case LoongArch::LDLE_W: in isSignExtendingOpW()
386 case LoongArch::AMSWAP_B: in isSignExtendingOpW()
387 case LoongArch::AMSWAP_H: in isSignExtendingOpW()
388 case LoongArch::AMSWAP_W: in isSignExtendingOpW()
389 case LoongArch::AMADD_B: in isSignExtendingOpW()
390 case LoongArch::AMADD_H: in isSignExtendingOpW()
391 case LoongArch::AMADD_W: in isSignExtendingOpW()
392 case LoongArch::AMAND_W: in isSignExtendingOpW()
393 case LoongArch::AMOR_W: in isSignExtendingOpW()
394 case LoongArch::AMXOR_W: in isSignExtendingOpW()
395 case LoongArch::AMMAX_W: in isSignExtendingOpW()
396 case LoongArch::AMMIN_W: in isSignExtendingOpW()
397 case LoongArch::AMMAX_WU: in isSignExtendingOpW()
398 case LoongArch::AMMIN_WU: in isSignExtendingOpW()
399 case LoongArch::AMSWAP__DB_B: in isSignExtendingOpW()
400 case LoongArch::AMSWAP__DB_H: in isSignExtendingOpW()
401 case LoongArch::AMSWAP__DB_W: in isSignExtendingOpW()
402 case LoongArch::AMADD__DB_B: in isSignExtendingOpW()
403 case LoongArch::AMADD__DB_H: in isSignExtendingOpW()
404 case LoongArch::AMADD__DB_W: in isSignExtendingOpW()
405 case LoongArch::AMAND__DB_W: in isSignExtendingOpW()
406 case LoongArch::AMOR__DB_W: in isSignExtendingOpW()
407 case LoongArch::AMXOR__DB_W: in isSignExtendingOpW()
408 case LoongArch::AMMAX__DB_W: in isSignExtendingOpW()
409 case LoongArch::AMMIN__DB_W: in isSignExtendingOpW()
410 case LoongArch::AMMAX__DB_WU: in isSignExtendingOpW()
411 case LoongArch::AMMIN__DB_WU: in isSignExtendingOpW()
412 case LoongArch::AMCAS_B: in isSignExtendingOpW()
413 case LoongArch::AMCAS_H: in isSignExtendingOpW()
414 case LoongArch::AMCAS_W: in isSignExtendingOpW()
415 case LoongArch::AMCAS__DB_B: in isSignExtendingOpW()
416 case LoongArch::AMCAS__DB_H: in isSignExtendingOpW()
417 case LoongArch::AMCAS__DB_W: in isSignExtendingOpW()
418 case LoongArch::CRC_W_B_W: in isSignExtendingOpW()
419 case LoongArch::CRC_W_H_W: in isSignExtendingOpW()
420 case LoongArch::CRC_W_W_W: in isSignExtendingOpW()
421 case LoongArch::CRC_W_D_W: in isSignExtendingOpW()
422 case LoongArch::CRCC_W_B_W: in isSignExtendingOpW()
423 case LoongArch::CRCC_W_H_W: in isSignExtendingOpW()
424 case LoongArch::CRCC_W_W_W: in isSignExtendingOpW()
425 case LoongArch::CRCC_W_D_W: in isSignExtendingOpW()
426 case LoongArch::IOCSRRD_B: in isSignExtendingOpW()
427 case LoongArch::IOCSRRD_H: in isSignExtendingOpW()
428 case LoongArch::IOCSRRD_W: in isSignExtendingOpW()
429 case LoongArch::MOVFR2GR_S: in isSignExtendingOpW()
430 case LoongArch::MOVFCSR2GR: in isSignExtendingOpW()
431 case LoongArch::MOVCF2GR: in isSignExtendingOpW()
432 case LoongArch::MOVFRH2GR_S: in isSignExtendingOpW()
433 case LoongArch::MOVFR2GR_S_64: in isSignExtendingOpW()
438 case LoongArch::SRAI_D: in isSignExtendingOpW()
440 case LoongArch::SRLI_D: in isSignExtendingOpW()
443 case LoongArch::ADDI_D: in isSignExtendingOpW()
444 case LoongArch::ORI: in isSignExtendingOpW()
446 MI.getOperand(1).getReg() == LoongArch::R0; in isSignExtendingOpW()
448 case LoongArch::BSTRPICK_D: in isSignExtendingOpW()
451 case LoongArch::COPY: in isSignExtendingOpW()
452 return MI.getOperand(1).getReg() == LoongArch::R0; in isSignExtendingOpW()
454 case LoongArch::PseudoMaskedAtomicSwap32: in isSignExtendingOpW()
455 case LoongArch::PseudoAtomicSwap32: in isSignExtendingOpW()
456 case LoongArch::PseudoMaskedAtomicLoadAdd32: in isSignExtendingOpW()
457 case LoongArch::PseudoMaskedAtomicLoadSub32: in isSignExtendingOpW()
458 case LoongArch::PseudoAtomicLoadNand32: in isSignExtendingOpW()
459 case LoongArch::PseudoMaskedAtomicLoadNand32: in isSignExtendingOpW()
460 case LoongArch::PseudoAtomicLoadAdd32: in isSignExtendingOpW()
461 case LoongArch::PseudoAtomicLoadSub32: in isSignExtendingOpW()
462 case LoongArch::PseudoAtomicLoadAnd32: in isSignExtendingOpW()
463 case LoongArch::PseudoAtomicLoadOr32: in isSignExtendingOpW()
464 case LoongArch::PseudoAtomicLoadXor32: in isSignExtendingOpW()
465 case LoongArch::PseudoMaskedAtomicLoadUMax32: in isSignExtendingOpW()
466 case LoongArch::PseudoMaskedAtomicLoadUMin32: in isSignExtendingOpW()
467 case LoongArch::PseudoCmpXchg32: in isSignExtendingOpW()
468 case LoongArch::PseudoMaskedCmpXchg32: in isSignExtendingOpW()
469 case LoongArch::PseudoMaskedAtomicLoadMax32: in isSignExtendingOpW()
470 case LoongArch::PseudoMaskedAtomicLoadMin32: in isSignExtendingOpW()
516 case LoongArch::COPY: { in isSignExtendedW()
530 if (CopySrcReg == LoongArch::R4) { in isSignExtendedW()
542 (--II)->getOpcode() != LoongArch::ADJCALLSTACKUP) in isSignExtendedW()
572 case LoongArch::MOD_D: in isSignExtendedW()
573 case LoongArch::ANDI: in isSignExtendedW()
574 case LoongArch::ORI: in isSignExtendedW()
575 case LoongArch::XORI: in isSignExtendedW()
583 case LoongArch::MOD_DU: in isSignExtendedW()
584 case LoongArch::AND: in isSignExtendedW()
585 case LoongArch::OR: in isSignExtendedW()
586 case LoongArch::XOR: in isSignExtendedW()
587 case LoongArch::ANDN: in isSignExtendedW()
588 case LoongArch::ORN: in isSignExtendedW()
589 case LoongArch::PHI: { in isSignExtendedW()
597 case LoongArch::PHI: in isSignExtendedW()
614 case LoongArch::MASKEQZ: in isSignExtendedW()
615 case LoongArch::MASKNEZ: in isSignExtendedW()
624 case LoongArch::SLLI_D: in isSignExtendedW()
629 case LoongArch::ADDI_D: in isSignExtendedW()
630 case LoongArch::ADD_D: in isSignExtendedW()
631 case LoongArch::LD_D: in isSignExtendedW()
632 case LoongArch::LD_WU: in isSignExtendedW()
633 case LoongArch::MUL_D: in isSignExtendedW()
634 case LoongArch::SUB_D: in isSignExtendedW()
642 case LoongArch::DIV_D: { in isSignExtendedW()
663 case LoongArch::ADDI_D: in getWOp()
664 return LoongArch::ADDI_W; in getWOp()
665 case LoongArch::ADD_D: in getWOp()
666 return LoongArch::ADD_W; in getWOp()
667 case LoongArch::DIV_D: in getWOp()
668 return LoongArch::DIV_W; in getWOp()
669 case LoongArch::LD_D: in getWOp()
670 case LoongArch::LD_WU: in getWOp()
671 return LoongArch::LD_W; in getWOp()
672 case LoongArch::MUL_D: in getWOp()
673 return LoongArch::MUL_W; in getWOp()
674 case LoongArch::SLLI_D: in getWOp()
675 return LoongArch::SLLI_W; in getWOp()
676 case LoongArch::SUB_D: in getWOp()
677 return LoongArch::SUB_W; in getWOp()
694 if (!LoongArch::isSEXT_W(MI)) in removeSExtWInstrs()
746 case LoongArch::ADDI_W: in convertToDSuffixes()
747 Opc = LoongArch::ADDI_D; in convertToDSuffixes()
773 case LoongArch::ADD_D: in convertToWSuffixes()
774 WOpc = LoongArch::ADD_W; in convertToWSuffixes()
776 case LoongArch::ADDI_D: in convertToWSuffixes()
777 WOpc = LoongArch::ADDI_W; in convertToWSuffixes()
779 case LoongArch::SUB_D: in convertToWSuffixes()
780 WOpc = LoongArch::SUB_W; in convertToWSuffixes()
782 case LoongArch::MUL_D: in convertToWSuffixes()
783 WOpc = LoongArch::MUL_W; in convertToWSuffixes()
785 case LoongArch::SLLI_D: in convertToWSuffixes()
789 WOpc = LoongArch::SLLI_W; in convertToWSuffixes()
791 case LoongArch::LD_D: in convertToWSuffixes()
792 case LoongArch::LD_WU: in convertToWSuffixes()
793 WOpc = LoongArch::LD_W; in convertToWSuffixes()