diff options
author | Chris Lattner <sabre@nondot.org> | 2005-12-21 17:53:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-12-21 17:53:02 +0000 |
commit | f1f03dfc66bf9c9626216afd370a09f80e8b76da (patch) | |
tree | d2d2d6b442789e650b9a1975256455fafcccbc98 /lib/AsmParser | |
parent | 90b02b08a50ea45afad4f5499b288d1434061481 (diff) |
Implement Regression/Assembler/2005-12-21-ZeroInitVector.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24903 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser')
-rw-r--r-- | lib/AsmParser/ParserInternals.h | 8 | ||||
-rw-r--r-- | lib/AsmParser/llvmAsmParser.y | 6 |
2 files changed, 13 insertions, 1 deletions
diff --git a/lib/AsmParser/ParserInternals.h b/lib/AsmParser/ParserInternals.h index b21dea7a07..6f747c7426 100644 --- a/lib/AsmParser/ParserInternals.h +++ b/lib/AsmParser/ParserInternals.h @@ -82,7 +82,7 @@ static inline void ThrowException(const std::string &message, struct ValID { enum { NumberVal, NameVal, ConstSIntVal, ConstUIntVal, ConstFPVal, ConstNullVal, - ConstUndefVal, ConstantVal, + ConstUndefVal, ConstZeroVal, ConstantVal, } Type; union { @@ -122,6 +122,10 @@ struct ValID { ValID D; D.Type = ConstUndefVal; return D; } + static ValID createZeroInit() { + ValID D; D.Type = ConstZeroVal; return D; + } + static ValID create(Constant *Val) { ValID D; D.Type = ConstantVal; D.ConstantValue = Val; return D; } @@ -145,6 +149,7 @@ struct ValID { case ConstFPVal : return ftostr(ConstPoolFP); case ConstNullVal : return "null"; case ConstUndefVal : return "undef"; + case ConstZeroVal : return "zeroinitializer"; case ConstUIntVal : case ConstSIntVal : return std::string("%") + itostr(ConstPool64); case ConstantVal: @@ -168,6 +173,7 @@ struct ValID { case ConstFPVal: return ConstPoolFP < V.ConstPoolFP; case ConstNullVal: return false; case ConstUndefVal: return false; + case ConstZeroVal: return false; case ConstantVal: return ConstantValue < V.ConstantValue; default: assert(0 && "Unknown value type!"); return false; } diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index 549a96d9c6..dfaeb83015 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -303,6 +303,9 @@ static Value *getValNonImprovising(const Type *Ty, const ValID &D) { case ValID::ConstUndefVal: // Is it an undef value? return UndefValue::get(Ty); + case ValID::ConstZeroVal: // Is it a zero value? + return Constant::getNullValue(Ty); + case ValID::ConstantVal: // Fully resolved constant? if (D.ConstantValue->getType() != Ty) ThrowException("Constant expression type different from required type!"); @@ -1816,6 +1819,9 @@ ConstValueRef : ESINT64VAL { // A reference to a direct constant | UNDEF { $$ = ValID::createUndef(); } + | ZEROINITIALIZER { // A vector zero constant. + $$ = ValID::createZeroInit(); + } | '<' ConstVector '>' { // Nonempty unsized packed vector const Type *ETy = (*$2)[0]->getType(); int NumElements = $2->size(); |