forked from OSchip/llvm-project
[ms-inline asm] Hoist more common code into the AsmStmt base class. Add stubs
with FIXMEs for unimplemented features. No functional change intended. llvm-svn: 162716
This commit is contained in:
parent
71c85b6a87
commit
a1b5c8c6a1
|
@ -1426,6 +1426,24 @@ public:
|
|||
return StringRef();
|
||||
}
|
||||
|
||||
/// getOutputConstraint - Return the constraint string for the specified
|
||||
/// output operand. All output constraints are known to be non-empty (either
|
||||
/// '=' or '+').
|
||||
virtual StringRef getOutputConstraint(unsigned i) const = 0;
|
||||
|
||||
/// isOutputPlusConstraint - Return true if the specified output constraint
|
||||
/// is a "+" constraint (which is both an input and an output) or false if it
|
||||
/// is an "=" constraint (just an output).
|
||||
bool isOutputPlusConstraint(unsigned i) const {
|
||||
return getOutputConstraint(i)[0] == '+';
|
||||
}
|
||||
|
||||
virtual const Expr *getOutputExpr(unsigned i) const = 0;
|
||||
|
||||
/// getNumPlusOperands - Return the number of output operands that have a "+"
|
||||
/// constraint.
|
||||
unsigned getNumPlusOperands() const;
|
||||
|
||||
//===--- Input operands ---===//
|
||||
|
||||
unsigned getNumInputs() const { return NumInputs; }
|
||||
|
@ -1441,6 +1459,12 @@ public:
|
|||
return StringRef();
|
||||
}
|
||||
|
||||
/// getInputConstraint - Return the specified input constraint. Unlike output
|
||||
/// constraints, these can be empty.
|
||||
virtual StringRef getInputConstraint(unsigned i) const = 0;
|
||||
|
||||
virtual const Expr *getInputExpr(unsigned i) const = 0;
|
||||
|
||||
//===--- Other ---===//
|
||||
|
||||
unsigned getNumClobbers() const { return NumClobbers; }
|
||||
|
@ -1581,9 +1605,6 @@ public:
|
|||
|
||||
//===--- Output operands ---===//
|
||||
|
||||
/// getOutputConstraint - Return the constraint string for the specified
|
||||
/// output operand. All output constraints are known to be non-empty (either
|
||||
/// '=' or '+').
|
||||
StringRef getOutputConstraint(unsigned i) const;
|
||||
|
||||
const StringLiteral *getOutputConstraintLiteral(unsigned i) const {
|
||||
|
@ -1599,21 +1620,8 @@ public:
|
|||
return const_cast<GCCAsmStmt*>(this)->getOutputExpr(i);
|
||||
}
|
||||
|
||||
/// isOutputPlusConstraint - Return true if the specified output constraint
|
||||
/// is a "+" constraint (which is both an input and an output) or false if it
|
||||
/// is an "=" constraint (just an output).
|
||||
bool isOutputPlusConstraint(unsigned i) const {
|
||||
return getOutputConstraint(i)[0] == '+';
|
||||
}
|
||||
|
||||
/// getNumPlusOperands - Return the number of output operands that have a "+"
|
||||
/// constraint.
|
||||
unsigned getNumPlusOperands() const;
|
||||
|
||||
//===--- Input operands ---===//
|
||||
|
||||
/// getInputConstraint - Return the specified input constraint. Unlike output
|
||||
/// constraints, these can be empty.
|
||||
StringRef getInputConstraint(unsigned i) const;
|
||||
|
||||
const StringLiteral *getInputConstraintLiteral(unsigned i) const {
|
||||
|
@ -1706,6 +1714,8 @@ public:
|
|||
|
||||
//===--- Output operands ---===//
|
||||
|
||||
StringRef getOutputConstraint(unsigned i) const;
|
||||
|
||||
Expr *getOutputExpr(unsigned i);
|
||||
|
||||
const Expr *getOutputExpr(unsigned i) const {
|
||||
|
@ -1714,6 +1724,8 @@ public:
|
|||
|
||||
//===--- Input operands ---===//
|
||||
|
||||
StringRef getInputConstraint(unsigned i) const;
|
||||
|
||||
Expr *getInputExpr(unsigned i);
|
||||
void setInputExpr(unsigned i, Expr *E);
|
||||
|
||||
|
|
|
@ -321,6 +321,16 @@ bool Stmt::hasImplicitControlFlow() const {
|
|||
}
|
||||
}
|
||||
|
||||
/// getNumPlusOperands - Return the number of output operands that have a "+"
|
||||
/// constraint.
|
||||
unsigned AsmStmt::getNumPlusOperands() const {
|
||||
unsigned Res = 0;
|
||||
for (unsigned i = 0, e = getNumOutputs(); i != e; ++i)
|
||||
if (isOutputPlusConstraint(i))
|
||||
++Res;
|
||||
return Res;
|
||||
}
|
||||
|
||||
StringRef GCCAsmStmt::getClobber(unsigned i) const {
|
||||
return getClobberStringLiteral(i)->getString();
|
||||
}
|
||||
|
@ -336,16 +346,6 @@ StringRef GCCAsmStmt::getOutputConstraint(unsigned i) const {
|
|||
return getOutputConstraintLiteral(i)->getString();
|
||||
}
|
||||
|
||||
/// getNumPlusOperands - Return the number of output operands that have a "+"
|
||||
/// constraint.
|
||||
unsigned GCCAsmStmt::getNumPlusOperands() const {
|
||||
unsigned Res = 0;
|
||||
for (unsigned i = 0, e = getNumOutputs(); i != e; ++i)
|
||||
if (isOutputPlusConstraint(i))
|
||||
++Res;
|
||||
return Res;
|
||||
}
|
||||
|
||||
Expr *GCCAsmStmt::getInputExpr(unsigned i) {
|
||||
return cast<Expr>(Exprs[i + NumOutputs]);
|
||||
}
|
||||
|
@ -353,14 +353,12 @@ void GCCAsmStmt::setInputExpr(unsigned i, Expr *E) {
|
|||
Exprs[i + NumOutputs] = E;
|
||||
}
|
||||
|
||||
|
||||
/// getInputConstraint - Return the specified input constraint. Unlike output
|
||||
/// constraints, these can be empty.
|
||||
StringRef GCCAsmStmt::getInputConstraint(unsigned i) const {
|
||||
return getInputConstraintLiteral(i)->getString();
|
||||
}
|
||||
|
||||
|
||||
void GCCAsmStmt::setOutputsAndInputsAndClobbers(ASTContext &C,
|
||||
IdentifierInfo **Names,
|
||||
StringLiteral **Constraints,
|
||||
|
@ -584,6 +582,14 @@ Expr *MSAsmStmt::getOutputExpr(unsigned i) {
|
|||
return cast<Expr>(Exprs[i]);
|
||||
}
|
||||
|
||||
/// getOutputConstraint - Return the constraint string for the specified
|
||||
/// output operand. All output constraints are known to be non-empty (either
|
||||
/// '=' or '+').
|
||||
StringRef MSAsmStmt::getOutputConstraint(unsigned i) const {
|
||||
// FIXME: Compute constraints.
|
||||
return StringRef();
|
||||
}
|
||||
|
||||
Expr *MSAsmStmt::getInputExpr(unsigned i) {
|
||||
return cast<Expr>(Exprs[i + NumOutputs]);
|
||||
}
|
||||
|
@ -591,6 +597,13 @@ void MSAsmStmt::setInputExpr(unsigned i, Expr *E) {
|
|||
Exprs[i + NumOutputs] = E;
|
||||
}
|
||||
|
||||
/// getInputConstraint - Return the specified input constraint. Unlike output
|
||||
/// constraints, these can be empty.
|
||||
StringRef MSAsmStmt::getInputConstraint(unsigned i) const {
|
||||
// FIXME: Compute constraints.
|
||||
return StringRef();
|
||||
}
|
||||
|
||||
QualType CXXCatchStmt::getCaughtType() const {
|
||||
if (ExceptionDecl)
|
||||
return ExceptionDecl->getType();
|
||||
|
|
Loading…
Reference in New Issue