Skip to content

Commit 035f33b

Browse files
committed
[X86][CodeGen] Add NDD entries for X86InstrInfo::foldImmediate
1 parent f2d0bba commit 035f33b

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

llvm/lib/Target/X86/X86InstrInfo.cpp

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5488,14 +5488,14 @@ static bool canConvert2Copy(unsigned Opc) {
54885488
switch (Opc) {
54895489
default:
54905490
return false;
5491-
case X86::ADD64ri32:
5492-
case X86::SUB64ri32:
5493-
case X86::OR64ri32:
5494-
case X86::XOR64ri32:
5495-
case X86::ADD32ri:
5496-
case X86::SUB32ri:
5497-
case X86::OR32ri:
5498-
case X86::XOR32ri:
5491+
CASE_ND(ADD64ri32)
5492+
CASE_ND(SUB64ri32)
5493+
CASE_ND(OR64ri32)
5494+
CASE_ND(XOR64ri32)
5495+
CASE_ND(ADD32ri)
5496+
CASE_ND(SUB32ri)
5497+
CASE_ND(OR32ri)
5498+
CASE_ND(XOR32ri)
54995499
return true;
55005500
}
55015501
}
@@ -5508,16 +5508,16 @@ static unsigned convertALUrr2ALUri(unsigned Opc) {
55085508
return 0;
55095509
#define FROM_TO(FROM, TO) \
55105510
case X86::FROM: \
5511-
return X86::TO;
5511+
return X86::TO; \
5512+
case X86::FROM##_ND: \
5513+
return X86::TO##_ND;
55125514
FROM_TO(ADD64rr, ADD64ri32)
55135515
FROM_TO(ADC64rr, ADC64ri32)
55145516
FROM_TO(SUB64rr, SUB64ri32)
55155517
FROM_TO(SBB64rr, SBB64ri32)
55165518
FROM_TO(AND64rr, AND64ri32)
55175519
FROM_TO(OR64rr, OR64ri32)
55185520
FROM_TO(XOR64rr, XOR64ri32)
5519-
FROM_TO(TEST64rr, TEST64ri32)
5520-
FROM_TO(CMP64rr, CMP64ri32)
55215521
FROM_TO(SHR64rCL, SHR64ri)
55225522
FROM_TO(SHL64rCL, SHL64ri)
55235523
FROM_TO(SAR64rCL, SAR64ri)
@@ -5532,15 +5532,21 @@ static unsigned convertALUrr2ALUri(unsigned Opc) {
55325532
FROM_TO(AND32rr, AND32ri)
55335533
FROM_TO(OR32rr, OR32ri)
55345534
FROM_TO(XOR32rr, XOR32ri)
5535-
FROM_TO(TEST32rr, TEST32ri)
5536-
FROM_TO(CMP32rr, CMP32ri)
55375535
FROM_TO(SHR32rCL, SHR32ri)
55385536
FROM_TO(SHL32rCL, SHL32ri)
55395537
FROM_TO(SAR32rCL, SAR32ri)
55405538
FROM_TO(ROL32rCL, ROL32ri)
55415539
FROM_TO(ROR32rCL, ROR32ri)
55425540
FROM_TO(RCL32rCL, RCL32ri)
55435541
FROM_TO(RCR32rCL, RCR32ri)
5542+
#undef FROM_TO
5543+
#define FROM_TO(FROM, TO) \
5544+
case X86::FROM: \
5545+
return X86::TO;
5546+
FROM_TO(TEST64rr, TEST64ri32)
5547+
FROM_TO(CMP64rr, CMP64ri32)
5548+
FROM_TO(TEST32rr, TEST32ri)
5549+
FROM_TO(CMP32rr, CMP32ri)
55445550
#undef FROM_TO
55455551
}
55465552
}
@@ -5634,7 +5640,9 @@ bool X86InstrInfo::foldImmediateImpl(MachineInstr &UseMI, MachineInstr *DefMI,
56345640

56355641
// For SUB instructions the immediate can only be the second source operand.
56365642
if ((NewOpc == X86::SUB64ri32 || NewOpc == X86::SUB32ri ||
5637-
NewOpc == X86::SBB64ri32 || NewOpc == X86::SBB32ri) &&
5643+
NewOpc == X86::SBB64ri32 || NewOpc == X86::SBB32ri ||
5644+
NewOpc == X86::SUB64ri32_ND || NewOpc == X86::SUB32ri_ND ||
5645+
NewOpc == X86::SBB64ri32_ND || NewOpc == X86::SBB32ri_ND) &&
56385646
UseMI.findRegisterUseOperandIdx(Reg) != 2)
56395647
return false;
56405648
// For CMP instructions the immediate can only be at index 1.

llvm/test/CodeGen/X86/select_const_i128.ll

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
22
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v2 | FileCheck %s
3+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v2 -mattr=+ndd | FileCheck --check-prefix=NDD %s
34

45
define i128 @select_eq_i128(ptr %a) {
56
; CHECK-LABEL: select_eq_i128:
@@ -13,6 +14,18 @@ define i128 @select_eq_i128(ptr %a) {
1314
; CHECK-NEXT: movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF
1415
; CHECK-NEXT: adcq $0, %rdx
1516
; CHECK-NEXT: retq
17+
;
18+
; NDD-LABEL: select_eq_i128:
19+
; NDD: # %bb.0:
20+
; NDD-NEXT: movdqa (%rdi), %xmm0
21+
; NDD-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22+
; NDD-NEXT: xorl %eax, %eax
23+
; NDD-NEXT: ptest %xmm0, %xmm0
24+
; NDD-NEXT: setne %al
25+
; NDD-NEXT: addq $-1, %rax
26+
; NDD-NEXT: movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
27+
; NDD-NEXT: adcq $0, %rcx, %rdx
28+
; NDD-NEXT: retq
1629
%1 = load i128, ptr %a, align 16
1730
%cmp = icmp eq i128 %1, 1
1831
%cond = select i1 %cmp, i128 170141183460469231731687303715884105727, i128 -170141183460469231731687303715884105728

0 commit comments

Comments
 (0)