Lines Matching refs:Pat

10 // as well as Pat patterns used during instruction selection.
48 def : Pat<(X86callseq_start timm:$amt1, timm:$amt2),
66 def : Pat<(X86callseq_start timm:$amt1, timm:$amt2),
300 def : Pat<(i8 0), (EXTRACT_SUBREG (MOV32r0), sub_8bit)>;
301 def : Pat<(i16 0), (EXTRACT_SUBREG (MOV32r0), sub_16bit)>;
302 def : Pat<(i64 0), (SUBREG_TO_REG (i64 0), (MOV32r0), sub_32bit)>;
319 def : Pat<(i16 1), (EXTRACT_SUBREG (MOV32r1), sub_16bit)>;
320 def : Pat<(i16 -1), (EXTRACT_SUBREG (MOV32r_1), sub_16bit)>;
345 def : Pat<(i64 mov64imm32:$src), (MOV32ri64 mov64imm32:$src)>;
350 // FIXME: These are pseudo ops that should be replaced with Pat<> patterns.
351 // However, Pat<> can't replicate the destination reg into the inputs of the
594 def : Pat<(f128 (X86cmov VR128:$t, VR128:$f, timm:$cond, EFLAGS)),
598 def : Pat<(v16i8 (X86cmov VR128:$t, VR128:$f, timm:$cond, EFLAGS)),
600 def : Pat<(v8i16 (X86cmov VR128:$t, VR128:$f, timm:$cond, EFLAGS)),
602 def : Pat<(v4i32 (X86cmov VR128:$t, VR128:$f, timm:$cond, EFLAGS)),
604 def : Pat<(v4f32 (X86cmov VR128:$t, VR128:$f, timm:$cond, EFLAGS)),
606 def : Pat<(v2f64 (X86cmov VR128:$t, VR128:$f, timm:$cond, EFLAGS)),
609 def : Pat<(v32i8 (X86cmov VR256:$t, VR256:$f, timm:$cond, EFLAGS)),
611 def : Pat<(v16i16 (X86cmov VR256:$t, VR256:$f, timm:$cond, EFLAGS)),
613 def : Pat<(v8i32 (X86cmov VR256:$t, VR256:$f, timm:$cond, EFLAGS)),
615 def : Pat<(v8f32 (X86cmov VR256:$t, VR256:$f, timm:$cond, EFLAGS)),
617 def : Pat<(v4f64 (X86cmov VR256:$t, VR256:$f, timm:$cond, EFLAGS)),
621 def : Pat<(v16i8 (X86cmov VR128X:$t, VR128X:$f, timm:$cond, EFLAGS)),
623 def : Pat<(v8i16 (X86cmov VR128X:$t, VR128X:$f, timm:$cond, EFLAGS)),
625 def : Pat<(v8f16 (X86cmov VR128X:$t, VR128X:$f, timm:$cond, EFLAGS)),
627 def : Pat<(v4i32 (X86cmov VR128X:$t, VR128X:$f, timm:$cond, EFLAGS)),
629 def : Pat<(v4f32 (X86cmov VR128X:$t, VR128X:$f, timm:$cond, EFLAGS)),
631 def : Pat<(v2f64 (X86cmov VR128X:$t, VR128X:$f, timm:$cond, EFLAGS)),
634 def : Pat<(v32i8 (X86cmov VR256X:$t, VR256X:$f, timm:$cond, EFLAGS)),
636 def : Pat<(v16i16 (X86cmov VR256X:$t, VR256X:$f, timm:$cond, EFLAGS)),
638 def : Pat<(v16f16 (X86cmov VR256X:$t, VR256X:$f, timm:$cond, EFLAGS)),
640 def : Pat<(v8i32 (X86cmov VR256X:$t, VR256X:$f, timm:$cond, EFLAGS)),
642 def : Pat<(v8f32 (X86cmov VR256X:$t, VR256X:$f, timm:$cond, EFLAGS)),
644 def : Pat<(v4f64 (X86cmov VR256X:$t, VR256X:$f, timm:$cond, EFLAGS)),
648 def : Pat<(v64i8 (X86cmov VR512:$t, VR512:$f, timm:$cond, EFLAGS)),
650 def : Pat<(v32i16 (X86cmov VR512:$t, VR512:$f, timm:$cond, EFLAGS)),
652 def : Pat<(v32f16 (X86cmov VR512:$t, VR512:$f, timm:$cond, EFLAGS)),
654 def : Pat<(v16i32 (X86cmov VR512:$t, VR512:$f, timm:$cond, EFLAGS)),
656 def : Pat<(v16f32 (X86cmov VR512:$t, VR512:$f, timm:$cond, EFLAGS)),
658 def : Pat<(v8f64 (X86cmov VR512:$t, VR512:$f, timm:$cond, EFLAGS)),
834 def : Pat<(X86lock_add addr:$dst, (i8 -1)), (LOCK_DEC8m addr:$dst)>;
835 def : Pat<(X86lock_add addr:$dst, (i16 -1)), (LOCK_DEC16m addr:$dst)>;
836 def : Pat<(X86lock_add addr:$dst, (i32 -1)), (LOCK_DEC32m addr:$dst)>;
837 def : Pat<(X86lock_add addr:$dst, (i64 -1)), (LOCK_DEC64m addr:$dst)>;
838 def : Pat<(X86lock_sub addr:$dst, (i8 -1)), (LOCK_INC8m addr:$dst)>;
839 def : Pat<(X86lock_sub addr:$dst, (i16 -1)), (LOCK_INC16m addr:$dst)>;
840 def : Pat<(X86lock_sub addr:$dst, (i32 -1)), (LOCK_INC32m addr:$dst)>;
841 def : Pat<(X86lock_sub addr:$dst, (i64 -1)), (LOCK_INC64m addr:$dst)>;
1027 def : Pat<(atomic_store_8 addr:$dst,
1030 def : Pat<(atomic_store_16 addr:$dst,
1033 def : Pat<(atomic_store_32 addr:$dst,
1036 def : Pat<(atomic_store_64 addr:$dst,
1040 def : Pat<(atomic_store_8 addr:$dst,
1043 def : Pat<(atomic_store_16 addr:$dst,
1046 def : Pat<(atomic_store_32 addr:$dst,
1049 def : Pat<(atomic_store_64 addr:$dst,
1062 def : Pat<(op FR32:$src1, (bitconvert (i32 (atomic_load_32 addr:$src2)))),
1065 def : Pat<(op FR32:$src1, (bitconvert (i32 (atomic_load_32 addr:$src2)))),
1068 def : Pat<(op FR32X:$src1, (bitconvert (i32 (atomic_load_32 addr:$src2)))),
1072 def : Pat<(op FR64:$src1, (bitconvert (i64 (atomic_load_64 addr:$src2)))),
1075 def : Pat<(op FR64:$src1, (bitconvert (i64 (atomic_load_64 addr:$src2)))),
1078 def : Pat<(op FR64X:$src1, (bitconvert (i64 (atomic_load_64 addr:$src2)))),
1087 def : Pat<(atomic_store_8 addr:$dst, dag8),
1089 def : Pat<(atomic_store_16 addr:$dst, dag16),
1091 def : Pat<(atomic_store_32 addr:$dst, dag32),
1093 def : Pat<(atomic_store_64 addr:$dst, dag64),
1121 def : Pat<(atomic_store_8 addr:$dst, (i8 imm:$src)),
1123 def : Pat<(atomic_store_16 addr:$dst, (i16 imm:$src)),
1125 def : Pat<(atomic_store_32 addr:$dst, (i32 imm:$src)),
1127 def : Pat<(atomic_store_64 addr:$dst, (i64immSExt32:$src)),
1130 def : Pat<(atomic_store_8 addr:$dst, GR8:$src),
1132 def : Pat<(atomic_store_16 addr:$dst, GR16:$src),
1134 def : Pat<(atomic_store_32 addr:$dst, GR32:$src),
1136 def : Pat<(atomic_store_64 addr:$dst, GR64:$src),
1139 def : Pat<(i8 (atomic_load_8 addr:$src)), (MOV8rm addr:$src)>;
1140 def : Pat<(i16 (atomic_load_16 addr:$src)), (MOV16rm addr:$src)>;
1141 def : Pat<(i32 (atomic_load_32 addr:$src)), (MOV32rm addr:$src)>;
1142 def : Pat<(i64 (atomic_load_64 addr:$src)), (MOV64rm addr:$src)>;
1145 def : Pat<(atomic_store_32 addr:$dst, (i32 (bitconvert (f32 FR32:$src)))),
1147 def : Pat<(atomic_store_32 addr:$dst, (i32 (bitconvert (f32 FR32:$src)))),
1149 def : Pat<(atomic_store_32 addr:$dst, (i32 (bitconvert (f32 FR32:$src)))),
1152 def : Pat<(atomic_store_64 addr:$dst, (i64 (bitconvert (f64 FR64:$src)))),
1154 def : Pat<(atomic_store_64 addr:$dst, (i64 (bitconvert (f64 FR64:$src)))),
1156 def : Pat<(atomic_store_64 addr:$dst, (i64 (bitconvert (f64 FR64:$src)))),
1159 def : Pat<(f32 (bitconvert (i32 (atomic_load_32 addr:$src)))),
1161 def : Pat<(f32 (bitconvert (i32 (atomic_load_32 addr:$src)))),
1163 def : Pat<(f32 (bitconvert (i32 (atomic_load_32 addr:$src)))),
1166 def : Pat<(f64 (bitconvert (i64 (atomic_load_64 addr:$src)))),
1168 def : Pat<(f64 (bitconvert (i64 (atomic_load_64 addr:$src)))),
1170 def : Pat<(f64 (bitconvert (i64 (atomic_load_64 addr:$src)))),
1181 def : Pat<(simple_store (i16 0), addr:$dst), (AND16mi8 addr:$dst, 0)>;
1182 def : Pat<(simple_store (i32 0), addr:$dst), (AND32mi8 addr:$dst, 0)>;
1183 def : Pat<(simple_store (i64 0), addr:$dst), (AND64mi8 addr:$dst, 0)>;
1184 def : Pat<(simple_store (i16 -1), addr:$dst), (OR16mi8 addr:$dst, -1)>;
1185 def : Pat<(simple_store (i32 -1), addr:$dst), (OR32mi8 addr:$dst, -1)>;
1186 def : Pat<(simple_store (i64 -1), addr:$dst), (OR64mi8 addr:$dst, -1)>;
1192 def : Pat<(i64 (X86Wrapper tconstpool :$dst)),
1194 def : Pat<(i64 (X86Wrapper tjumptable :$dst)),
1196 def : Pat<(i64 (X86Wrapper tglobaladdr :$dst)),
1198 def : Pat<(i64 (X86Wrapper texternalsym:$dst)),
1200 def : Pat<(i64 (X86Wrapper mcsym:$dst)),
1202 def : Pat<(i64 (X86Wrapper tblockaddress:$dst)),
1208 def : Pat<(store (i64 (X86Wrapper tconstpool:$src)), addr:$dst),
1211 def : Pat<(store (i64 (X86Wrapper tjumptable:$src)), addr:$dst),
1214 def : Pat<(store (i64 (X86Wrapper tglobaladdr:$src)), addr:$dst),
1217 def : Pat<(store (i64 (X86Wrapper texternalsym:$src)), addr:$dst),
1220 def : Pat<(store (i64 (X86Wrapper mcsym:$src)), addr:$dst),
1223 def : Pat<(store (i64 (X86Wrapper tblockaddress:$src)), addr:$dst),
1227 def : Pat<(i32 (X86RecoverFrameAlloc mcsym:$dst)), (MOV32ri mcsym:$dst)>;
1228 def : Pat<(i64 (X86RecoverFrameAlloc mcsym:$dst)), (MOV64ri mcsym:$dst)>;
1234 def : Pat<(i64 (X86Wrapper tglobaltlsaddr :$dst)),
1237 def : Pat<(add GR64:$src1, (X86Wrapper tglobaltlsaddr :$dst)),
1243 def : Pat<(X86call (i64 tglobaladdr:$dst)),
1245 def : Pat<(X86call (i64 texternalsym:$dst)),
1248 def : Pat<(X86call_rvmarker (i64 tglobaladdr:$rvfunc), (i64 texternalsym:$dst)),
1250 def : Pat<(X86call_rvmarker (i64 tglobaladdr:$rvfunc), (i64 tglobaladdr:$dst)),
1287 def : Pat<(X86tcret ptr_rc_tailcall:$dst, timm:$off),
1295 def : Pat<(X86tcret_1reg (load addr:$dst), timm:$off),
1299 def : Pat<(X86tcret (i32 tglobaladdr:$dst), timm:$off),
1303 def : Pat<(X86tcret (i32 texternalsym:$dst), timm:$off),
1307 def : Pat<(X86tcret ptr_rc_tailcall:$dst, timm:$off),
1313 def : Pat<(X86tcret_6regs (load addr:$dst), timm:$off),
1317 def : Pat<(X86tcret ptr_rc_tailcall:$dst, timm:$off),
1321 def : Pat<(X86tcret ptr_rc_tailcall:$dst, timm:$off),
1325 def : Pat<(X86tcret (i64 tglobaladdr:$dst), timm:$off),
1329 def : Pat<(X86tcret (i64 texternalsym:$dst), timm:$off),
1334 def : Pat<(X86call (i32 tglobaladdr:$dst)),
1336 def : Pat<(X86call (i32 texternalsym:$dst)),
1338 def : Pat<(X86call (i32 imm:$dst)),
1344 def : Pat<(X86cmp GR8:$src1, 0),
1346 def : Pat<(X86cmp GR16:$src1, 0),
1348 def : Pat<(X86cmp GR32:$src1, 0),
1350 def : Pat<(X86cmp GR64:$src1, 0),
1356 def : Pat<(zextloadi8i1 addr:$src), (MOV8rm addr:$src)>;
1357 def : Pat<(zextloadi16i1 addr:$src),
1359 def : Pat<(zextloadi32i1 addr:$src), (MOVZX32rm8 addr:$src)>;
1360 def : Pat<(zextloadi64i1 addr:$src),
1368 def : Pat<(extloadi8i1 addr:$src), (MOV8rm addr:$src)>;
1369 def : Pat<(extloadi16i1 addr:$src),
1371 def : Pat<(extloadi32i1 addr:$src), (MOVZX32rm8 addr:$src)>;
1372 def : Pat<(extloadi16i8 addr:$src),
1374 def : Pat<(extloadi32i8 addr:$src), (MOVZX32rm8 addr:$src)>;
1375 def : Pat<(extloadi32i16 addr:$src), (MOVZX32rm16 addr:$src)>;
1381 def : Pat<(extloadi64i32 addr:$src),
1383 def : Pat<(extloadi64i1 addr:$src),
1385 def : Pat<(extloadi64i8 addr:$src),
1387 def : Pat<(extloadi64i16 addr:$src),
1392 def : Pat<(i16 (anyext GR8 :$src)), (EXTRACT_SUBREG
1394 def : Pat<(i32 (anyext GR8 :$src)), (MOVZX32rr8 GR8 :$src)>;
1397 def : Pat<(i32 (anyext GR16:$src)),
1400 def : Pat<(i64 (anyext GR8 :$src)),
1402 def : Pat<(i64 (anyext GR16:$src)),
1404 def : Pat<(i64 (anyext GR32:$src)),
1415 def : Pat<(i32 (anyext_sdiv GR8:$src)), (MOVSX32rr8 GR8:$src)>;
1435 def : Pat<(i64 (zext def32:$src)),
1437 def : Pat<(i64 (and (anyext def32:$src), 0x00000000FFFFFFFF)),
1526 def : Pat<(xor GR8:$src1, -128),
1528 def : Pat<(xor GR16:$src1, -32768),
1530 def : Pat<(xor GR32:$src1, -2147483648),
1540 def : Pat<(add GR16:$src1, 128),
1542 def : Pat<(store (add (loadi16 addr:$dst), 128), addr:$dst),
1545 def : Pat<(add GR32:$src1, 128),
1547 def : Pat<(store (add (loadi32 addr:$dst), 128), addr:$dst),
1550 def : Pat<(add GR64:$src1, 128),
1552 def : Pat<(store (add (loadi64 addr:$dst), 128), addr:$dst),
1555 def : Pat<(X86add_flag_nocf GR16:$src1, 128),
1557 def : Pat<(X86add_flag_nocf GR32:$src1, 128),
1559 def : Pat<(X86add_flag_nocf GR64:$src1, 128),
1564 def : Pat<(add GR64:$src1, 0x0000000080000000),
1566 def : Pat<(store (add (loadi64 addr:$dst), 0x0000000080000000), addr:$dst),
1569 def : Pat<(X86add_flag_nocf GR64:$src1, 0x0000000080000000),
1581 def : Pat<(and GR64:$src, i64immZExt32SExt8:$imm),
1589 def : Pat<(and GR64:$src, i64immZExt32:$imm),
1604 def : Pat<(and GR32:$src1, 0xffff),
1607 def : Pat<(and GR32:$src1, 0xff),
1610 def : Pat<(and GR16:$src1, 0xff),
1615 def : Pat<(and GR64:$src, 0x00000000FFFFFFFF),
1620 def : Pat<(and GR64:$src, 0xffff),
1625 def : Pat<(and GR64:$src, 0xff),
1654 def : Pat<(and GR64:$src1, BTRMask64:$mask),
1656 def : Pat<(or GR64:$src1, BTCBTSMask64:$mask),
1658 def : Pat<(xor GR64:$src1, BTCBTSMask64:$mask),
1664 def : Pat<(sext_inreg GR32:$src, i16),
1666 def : Pat<(sext_inreg GR32:$src, i8),
1669 def : Pat<(sext_inreg GR16:$src, i8),
1673 def : Pat<(sext_inreg GR64:$src, i32),
1675 def : Pat<(sext_inreg GR64:$src, i16),
1677 def : Pat<(sext_inreg GR64:$src, i8),
1681 def: Pat<(i16 (sext GR8:$src)),
1683 def: Pat<(sextloadi16i8 addr:$src),
1685 def: Pat<(i16 (zext GR8:$src)),
1687 def: Pat<(zextloadi16i8 addr:$src),
1691 def : Pat<(i16 (trunc GR32:$src)),
1693 def : Pat<(i8 (trunc GR32:$src)),
1697 def : Pat<(i8 (trunc GR16:$src)),
1701 def : Pat<(i32 (trunc GR64:$src)),
1703 def : Pat<(i16 (trunc GR64:$src)),
1705 def : Pat<(i8 (trunc GR64:$src)),
1707 def : Pat<(i8 (trunc GR32:$src)),
1710 def : Pat<(i8 (trunc GR16:$src)),
1719 def : Pat<(i8 (trunc (srl_su GR16:$src, (i8 8)))),
1722 def : Pat<(i8 (trunc (srl_su (i32 (anyext GR16:$src)), (i8 8)))),
1725 def : Pat<(i8 (trunc (srl_su GR32:$src, (i8 8)))),
1728 def : Pat<(srl GR16:$src, (i8 8)),
1732 def : Pat<(i32 (zext (srl_su GR16:$src, (i8 8)))),
1734 def : Pat<(i32 (anyext (srl_su GR16:$src, (i8 8)))),
1736 def : Pat<(and (srl_su GR32:$src, (i8 8)), (i32 255)),
1738 def : Pat<(srl (and_su GR32:$src, immff00_ffff), (i8 8)),
1749 def : Pat<(and (srl_su GR64:$src, (i8 8)), (i64 255)),
1755 def : Pat<(i64 (zext (srl_su GR16:$src, (i8 8)))),
1761 def : Pat<(i64 (anyext (srl_su GR16:$src, (i8 8)))),
1769 def : Pat<(store (i8 (trunc_su (srl_su GR64:$src, (i8 8)))), addr:$dst),
1773 def : Pat<(store (i8 (trunc_su (srl_su GR32:$src, (i8 8)))), addr:$dst),
1778 def : Pat<(store (i8 (trunc_su (srl_su GR16:$src, (i8 8)))), addr:$dst),
1790 def : Pat<(X86xor_flag (i8 (trunc GR32:$src)),
1801 def : Pat<(shl GR8 :$src1, (i8 1)), (ADD8rr GR8 :$src1, GR8 :$src1)>;
1802 def : Pat<(shl GR16:$src1, (i8 1)), (ADD16rr GR16:$src1, GR16:$src1)>;
1803 def : Pat<(shl GR32:$src1, (i8 1)), (ADD32rr GR32:$src1, GR32:$src1)>;
1804 def : Pat<(shl GR64:$src1, (i8 1)), (ADD64rr GR64:$src1, GR64:$src1)>;
1826 def : Pat<(frag GR8:$src1, (shiftMask32 CL)),
1828 def : Pat<(frag GR16:$src1, (shiftMask32 CL)),
1830 def : Pat<(frag GR32:$src1, (shiftMask32 CL)),
1832 def : Pat<(store (frag (loadi8 addr:$dst), (shiftMask32 CL)), addr:$dst),
1834 def : Pat<(store (frag (loadi16 addr:$dst), (shiftMask32 CL)), addr:$dst),
1836 def : Pat<(store (frag (loadi32 addr:$dst), (shiftMask32 CL)), addr:$dst),
1840 def : Pat<(frag GR64:$src1, (shiftMask64 CL)),
1842 def : Pat<(store (frag (loadi64 addr:$dst), (shiftMask64 CL)), addr:$dst),
1858 def : Pat<(frag GR8:$src1, (shiftMask8 CL)),
1860 def : Pat<(frag GR16:$src1, (shiftMask16 CL)),
1862 def : Pat<(frag GR32:$src1, (shiftMask32 CL)),
1864 def : Pat<(store (frag (loadi8 addr:$dst), (shiftMask8 CL)), addr:$dst),
1866 def : Pat<(store (frag (loadi16 addr:$dst), (shiftMask16 CL)), addr:$dst),
1868 def : Pat<(store (frag (loadi32 addr:$dst), (shiftMask32 CL)), addr:$dst),
1872 def : Pat<(frag GR64:$src1, (shiftMask64 CL)),
1874 def : Pat<(store (frag (loadi64 addr:$dst), (shiftMask64 CL)), addr:$dst),
1884 def : Pat<(X86fshl GR16:$src1, GR16:$src2, (shiftMask32 CL)),
1886 def : Pat<(X86fshr GR16:$src2, GR16:$src1, (shiftMask32 CL)),
1890 def : Pat<(fshl GR32:$src1, GR32:$src2, (shiftMask32 CL)),
1892 def : Pat<(fshr GR32:$src2, GR32:$src1, (shiftMask32 CL)),
1896 def : Pat<(fshl GR64:$src1, GR64:$src2, (shiftMask64 CL)),
1898 def : Pat<(fshr GR64:$src2, GR64:$src1, (shiftMask64 CL)),
1903 def : Pat<(sra GR32:$src1, (shiftMask32 GR8:$src2)),
1907 def : Pat<(sra GR64:$src1, (shiftMask64 GR8:$src2)),
1912 def : Pat<(srl GR32:$src1, (shiftMask32 GR8:$src2)),
1916 def : Pat<(srl GR64:$src1, (shiftMask64 GR8:$src2)),
1921 def : Pat<(shl GR32:$src1, (shiftMask32 GR8:$src2)),
1925 def : Pat<(shl GR64:$src1, (shiftMask64 GR8:$src2)),
1931 def : Pat<(sra (loadi32 addr:$src1), (shiftMask32 GR8:$src2)),
1935 def : Pat<(sra (loadi64 addr:$src1), (shiftMask64 GR8:$src2)),
1940 def : Pat<(srl (loadi32 addr:$src1), (shiftMask32 GR8:$src2)),
1944 def : Pat<(srl (loadi64 addr:$src1), (shiftMask64 GR8:$src2)),
1949 def : Pat<(shl (loadi32 addr:$src1), (shiftMask32 GR8:$src2)),
1953 def : Pat<(shl (loadi64 addr:$src1), (shiftMask64 GR8:$src2)),
1963 def : Pat<(and RC:$src1, (rotl -2, GR8:$src2)),
1966 def : Pat<(or RC:$src1, (shl 1, GR8:$src2)),
1969 def : Pat<(xor RC:$src1, (shl 1, GR8:$src2)),
1974 def : Pat<(and RC:$src1, (rotl -2, (ShiftMask GR8:$src2))),
1977 def : Pat<(or RC:$src1, (shl 1, (ShiftMask GR8:$src2))),
1980 def : Pat<(xor RC:$src1, (shl 1, (ShiftMask GR8:$src2))),
1994 def : Pat<(add GR8 :$src1, GR8 :$src2), (ADD8rr GR8 :$src1, GR8 :$src2)>;
1995 def : Pat<(add GR16:$src1, GR16:$src2), (ADD16rr GR16:$src1, GR16:$src2)>;
1996 def : Pat<(add GR32:$src1, GR32:$src2), (ADD32rr GR32:$src1, GR32:$src2)>;
1997 def : Pat<(add GR64:$src1, GR64:$src2), (ADD64rr GR64:$src1, GR64:$src2)>;
2000 def : Pat<(add GR8:$src1, (loadi8 addr:$src2)),
2002 def : Pat<(add GR16:$src1, (loadi16 addr:$src2)),
2004 def : Pat<(add GR32:$src1, (loadi32 addr:$src2)),
2006 def : Pat<(add GR64:$src1, (loadi64 addr:$src2)),
2010 def : Pat<(add GR8 :$src1, imm:$src2), (ADD8ri GR8:$src1 , imm:$src2)>;
2011 def : Pat<(add GR16:$src1, imm:$src2), (ADD16ri GR16:$src1, imm:$src2)>;
2012 def : Pat<(add GR32:$src1, imm:$src2), (ADD32ri GR32:$src1, imm:$src2)>;
2013 def : Pat<(add GR16:$src1, i16immSExt8:$src2),
2015 def : Pat<(add GR32:$src1, i32immSExt8:$src2),
2017 def : Pat<(add GR64:$src1, i64immSExt8:$src2),
2019 def : Pat<(add GR64:$src1, i64immSExt32:$src2),
2023 def : Pat<(sub GR8 :$src1, GR8 :$src2), (SUB8rr GR8 :$src1, GR8 :$src2)>;
2024 def : Pat<(sub GR16:$src1, GR16:$src2), (SUB16rr GR16:$src1, GR16:$src2)>;
2025 def : Pat<(sub GR32:$src1, GR32:$src2), (SUB32rr GR32:$src1, GR32:$src2)>;
2026 def : Pat<(sub GR64:$src1, GR64:$src2), (SUB64rr GR64:$src1, GR64:$src2)>;
2029 def : Pat<(sub GR8:$src1, (loadi8 addr:$src2)),
2031 def : Pat<(sub GR16:$src1, (loadi16 addr:$src2)),
2033 def : Pat<(sub GR32:$src1, (loadi32 addr:$src2)),
2035 def : Pat<(sub GR64:$src1, (loadi64 addr:$src2)),
2039 def : Pat<(sub GR8:$src1, imm:$src2),
2041 def : Pat<(sub GR16:$src1, imm:$src2),
2043 def : Pat<(sub GR32:$src1, imm:$src2),
2045 def : Pat<(sub GR16:$src1, i16immSExt8:$src2),
2047 def : Pat<(sub GR32:$src1, i32immSExt8:$src2),
2049 def : Pat<(sub GR64:$src1, i64immSExt8:$src2),
2051 def : Pat<(sub GR64:$src1, i64immSExt32:$src2),
2055 def : Pat<(X86sub_flag 0, GR8 :$src), (NEG8r GR8 :$src)>;
2056 def : Pat<(X86sub_flag 0, GR16:$src), (NEG16r GR16:$src)>;
2057 def : Pat<(X86sub_flag 0, GR32:$src), (NEG32r GR32:$src)>;
2058 def : Pat<(X86sub_flag 0, GR64:$src), (NEG64r GR64:$src)>;
2061 def : Pat<(mul GR16:$src1, GR16:$src2),
2063 def : Pat<(mul GR32:$src1, GR32:$src2),
2065 def : Pat<(mul GR64:$src1, GR64:$src2),
2069 def : Pat<(mul GR16:$src1, (loadi16 addr:$src2)),
2071 def : Pat<(mul GR32:$src1, (loadi32 addr:$src2)),
2073 def : Pat<(mul GR64:$src1, (loadi64 addr:$src2)),
2077 def : Pat<(mul GR16:$src1, imm:$src2),
2079 def : Pat<(mul GR32:$src1, imm:$src2),
2081 def : Pat<(mul GR16:$src1, i16immSExt8:$src2),
2083 def : Pat<(mul GR32:$src1, i32immSExt8:$src2),
2085 def : Pat<(mul GR64:$src1, i64immSExt8:$src2),
2087 def : Pat<(mul GR64:$src1, i64immSExt32:$src2),
2091 def : Pat<(mul (loadi16 addr:$src1), imm:$src2),
2093 def : Pat<(mul (loadi32 addr:$src1), imm:$src2),
2095 def : Pat<(mul (loadi16 addr:$src1), i16immSExt8:$src2),
2097 def : Pat<(mul (loadi32 addr:$src1), i32immSExt8:$src2),
2099 def : Pat<(mul (loadi64 addr:$src1), i64immSExt8:$src2),
2101 def : Pat<(mul (loadi64 addr:$src1), i64immSExt32:$src2),
2107 def : Pat<(add GR8:$src, 1), (INC8r GR8:$src)>;
2108 def : Pat<(add GR16:$src, 1), (INC16r GR16:$src)>;
2109 def : Pat<(add GR32:$src, 1), (INC32r GR32:$src)>;
2110 def : Pat<(add GR64:$src, 1), (INC64r GR64:$src)>;
2111 def : Pat<(add GR8:$src, -1), (DEC8r GR8:$src)>;
2112 def : Pat<(add GR16:$src, -1), (DEC16r GR16:$src)>;
2113 def : Pat<(add GR32:$src, -1), (DEC32r GR32:$src)>;
2114 def : Pat<(add GR64:$src, -1), (DEC64r GR64:$src)>;
2116 def : Pat<(X86add_flag_nocf GR8:$src, -1), (DEC8r GR8:$src)>;
2117 def : Pat<(X86add_flag_nocf GR16:$src, -1), (DEC16r GR16:$src)>;
2118 def : Pat<(X86add_flag_nocf GR32:$src, -1), (DEC32r GR32:$src)>;
2119 def : Pat<(X86add_flag_nocf GR64:$src, -1), (DEC64r GR64:$src)>;
2120 def : Pat<(X86sub_flag_nocf GR8:$src, -1), (INC8r GR8:$src)>;
2121 def : Pat<(X86sub_flag_nocf GR16:$src, -1), (INC16r GR16:$src)>;
2122 def : Pat<(X86sub_flag_nocf GR32:$src, -1), (INC32r GR32:$src)>;
2123 def : Pat<(X86sub_flag_nocf GR64:$src, -1), (INC64r GR64:$src)>;
2127 def : Pat<(or GR8 :$src1, GR8 :$src2), (OR8rr GR8 :$src1, GR8 :$src2)>;
2128 def : Pat<(or GR16:$src1, GR16:$src2), (OR16rr GR16:$src1, GR16:$src2)>;
2129 def : Pat<(or GR32:$src1, GR32:$src2), (OR32rr GR32:$src1, GR32:$src2)>;
2130 def : Pat<(or GR64:$src1, GR64:$src2), (OR64rr GR64:$src1, GR64:$src2)>;
2133 def : Pat<(or GR8:$src1, (loadi8 addr:$src2)),
2135 def : Pat<(or GR16:$src1, (loadi16 addr:$src2)),
2137 def : Pat<(or GR32:$src1, (loadi32 addr:$src2)),
2139 def : Pat<(or GR64:$src1, (loadi64 addr:$src2)),
2143 def : Pat<(or GR8:$src1 , imm:$src2), (OR8ri GR8 :$src1, imm:$src2)>;
2144 def : Pat<(or GR16:$src1, imm:$src2), (OR16ri GR16:$src1, imm:$src2)>;
2145 def : Pat<(or GR32:$src1, imm:$src2), (OR32ri GR32:$src1, imm:$src2)>;
2146 def : Pat<(or GR16:$src1, i16immSExt8:$src2),
2148 def : Pat<(or GR32:$src1, i32immSExt8:$src2),
2150 def : Pat<(or GR64:$src1, i64immSExt8:$src2),
2152 def : Pat<(or GR64:$src1, i64immSExt32:$src2),
2156 def : Pat<(xor GR8 :$src1, GR8 :$src2), (XOR8rr GR8 :$src1, GR8 :$src2)>;
2157 def : Pat<(xor GR16:$src1, GR16:$src2), (XOR16rr GR16:$src1, GR16:$src2)>;
2158 def : Pat<(xor GR32:$src1, GR32:$src2), (XOR32rr GR32:$src1, GR32:$src2)>;
2159 def : Pat<(xor GR64:$src1, GR64:$src2), (XOR64rr GR64:$src1, GR64:$src2)>;
2162 def : Pat<(xor GR8:$src1, (loadi8 addr:$src2)),
2164 def : Pat<(xor GR16:$src1, (loadi16 addr:$src2)),
2166 def : Pat<(xor GR32:$src1, (loadi32 addr:$src2)),
2168 def : Pat<(xor GR64:$src1, (loadi64 addr:$src2)),
2172 def : Pat<(xor GR8:$src1, imm:$src2),
2174 def : Pat<(xor GR16:$src1, imm:$src2),
2176 def : Pat<(xor GR32:$src1, imm:$src2),
2178 def : Pat<(xor GR16:$src1, i16immSExt8:$src2),
2180 def : Pat<(xor GR32:$src1, i32immSExt8:$src2),
2182 def : Pat<(xor GR64:$src1, i64immSExt8:$src2),
2184 def : Pat<(xor GR64:$src1, i64immSExt32:$src2),
2188 def : Pat<(and GR8 :$src1, GR8 :$src2), (AND8rr GR8 :$src1, GR8 :$src2)>;
2189 def : Pat<(and GR16:$src1, GR16:$src2), (AND16rr GR16:$src1, GR16:$src2)>;
2190 def : Pat<(and GR32:$src1, GR32:$src2), (AND32rr GR32:$src1, GR32:$src2)>;
2191 def : Pat<(and GR64:$src1, GR64:$src2), (AND64rr GR64:$src1, GR64:$src2)>;
2194 def : Pat<(and GR8:$src1, (loadi8 addr:$src2)),
2196 def : Pat<(and GR16:$src1, (loadi16 addr:$src2)),
2198 def : Pat<(and GR32:$src1, (loadi32 addr:$src2)),
2200 def : Pat<(and GR64:$src1, (loadi64 addr:$src2)),
2204 def : Pat<(and GR8:$src1, imm:$src2),
2206 def : Pat<(and GR16:$src1, imm:$src2),
2208 def : Pat<(and GR32:$src1, imm:$src2),
2210 def : Pat<(and GR16:$src1, i16immSExt8:$src2),
2212 def : Pat<(and GR32:$src1, i32immSExt8:$src2),
2214 def : Pat<(and GR64:$src1, i64immSExt8:$src2),
2216 def : Pat<(and GR64:$src1, i64immSExt32:$src2),
2220 def : Pat<(cttz_zero_undef GR16:$src), (BSF16rr GR16:$src)>;
2221 def : Pat<(cttz_zero_undef GR32:$src), (BSF32rr GR32:$src)>;
2222 def : Pat<(cttz_zero_undef GR64:$src), (BSF64rr GR64:$src)>;
2223 def : Pat<(cttz_zero_undef (loadi16 addr:$src)), (BSF16rm addr:$src)>;
2224 def : Pat<(cttz_zero_undef (loadi32 addr:$src)), (BSF32rm addr:$src)>;
2225 def : Pat<(cttz_zero_undef (loadi64 addr:$src)), (BSF64rm addr:$src)>;
2230 def : Pat<(bswap GR16:$src), (ROL16ri GR16:$src, (i8 8))>;