From f4dff84c8614fc2106d821e4687c933d8d4b9420 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 11 Jul 2006 02:54:03 +0000 Subject: [PATCH] Implement the inline asm 'A' constraint. This implements PR825 and CodeGen/X86/2006-07-10-InlineAsmAConstraint.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29101 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelLowering.cpp | 16 +++++++++++++++- lib/Target/X86/X86ISelLowering.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 7d21e5397be..d96be87efde 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -4135,6 +4135,16 @@ SDOperand X86TargetLowering::PerformDAGCombine(SDNode *N, // X86 Inline Assembly Support //===----------------------------------------------------------------------===// +/// getConstraintType - Given a constraint letter, return the type of +/// constraint it is for this target. +X86TargetLowering::ConstraintType +X86TargetLowering::getConstraintType(char ConstraintLetter) const { + switch (ConstraintLetter) { + case 'A': return C_RegisterClass; + default: return TargetLowering::getConstraintType(ConstraintLetter); + } +} + std::vector X86TargetLowering:: getRegClassForInlineAsmConstraint(const std::string &Constraint, MVT::ValueType VT) const { @@ -4142,7 +4152,11 @@ getRegClassForInlineAsmConstraint(const std::string &Constraint, // FIXME: not handling fp-stack yet! // FIXME: not handling MMX registers yet ('y' constraint). switch (Constraint[0]) { // GCC X86 Constraint Letters - default: break; // Unknown constriant letter + default: break; // Unknown constraint letter + case 'A': // EAX/EDX + if (VT == MVT::i32 || VT == MVT::i64) + return make_vector(X86::EAX, X86::EDX, 0); + break; case 'r': // GENERAL_REGS case 'R': // LEGACY_REGS if (VT == MVT::i32) diff --git a/lib/Target/X86/X86ISelLowering.h b/lib/Target/X86/X86ISelLowering.h index 0dea459c6f5..2002910dfc4 100644 --- a/lib/Target/X86/X86ISelLowering.h +++ b/lib/Target/X86/X86ISelLowering.h @@ -310,6 +310,8 @@ namespace llvm { SDOperand getReturnAddressFrameIndex(SelectionDAG &DAG); + ConstraintType getConstraintType(char ConstraintLetter) const; + std::vector getRegClassForInlineAsmConstraint(const std::string &Constraint, MVT::ValueType VT) const;