Regenerate.

llvm-svn: 33532
This commit is contained in:
Reid Spencer 2007-01-26 08:19:09 +00:00
parent 00a7c7f85a
commit 4f95f1ab08
7 changed files with 9422 additions and 6348 deletions

View File

@ -9,7 +9,7 @@
LEVEL = ../..
TOOLNAME = llvm-upgrade
LINK_COMPONENTS := support system
LINK_COMPONENTS := BCWriter Core support system
REQUIRES_EH := 1
include $(LEVEL)/Makefile.common

File diff suppressed because it is too large Load Diff

View File

@ -25,8 +25,9 @@
%option noyymore
%{
#include "UpgradeInternals.h"
#include "llvm/Module.h"
#include <list>
#include "UpgradeParser.h"
#include <cctype>
#include <cstdlib>
@ -41,17 +42,108 @@
} \
}
#define YY_NEVER_INTERACTIVE 1
// Construct a token value for a non-obsolete token
#define RET_TOK(sym) \
Upgradelval.String = new std::string(yytext); \
#define RET_TOK(type, Enum, sym) \
Upgradelval.type = Enum; \
return sym
#define RET_TY(sym,OldTY,NewTY,sign) \
Upgradelval.Ty = getType(NewTY, OldTY); \
#define RET_TY(sym,NewTY,sign) \
Upgradelval.PrimType.T = NewTY; \
Upgradelval.PrimType.S = sign; \
return sym
#define YY_NEVER_INTERACTIVE 1
namespace llvm {
// TODO: All of the static identifiers are figured out by the lexer,
// these should be hashed to reduce the lexer size
// UnEscapeLexed - Run through the specified buffer and change \xx codes to the
// appropriate character. If AllowNull is set to false, a \00 value will cause
// an exception to be thrown.
//
// If AllowNull is set to true, the return value of the function points to the
// last character of the string in memory.
//
char *UnEscapeLexed(char *Buffer, bool AllowNull) {
char *BOut = Buffer;
for (char *BIn = Buffer; *BIn; ) {
if (BIn[0] == '\\' && isxdigit(BIn[1]) && isxdigit(BIn[2])) {
char Tmp = BIn[3]; BIn[3] = 0; // Terminate string
*BOut = (char)strtol(BIn+1, 0, 16); // Convert to number
if (!AllowNull && !*BOut)
error("String literal cannot accept \\00 escape!");
BIn[3] = Tmp; // Restore character
BIn += 3; // Skip over handled chars
++BOut;
} else {
*BOut++ = *BIn++;
}
}
return BOut;
}
// atoull - Convert an ascii string of decimal digits into the unsigned long
// long representation... this does not have to do input error checking,
// because we know that the input will be matched by a suitable regex...
//
static uint64_t atoull(const char *Buffer) {
uint64_t Result = 0;
for (; *Buffer; Buffer++) {
uint64_t OldRes = Result;
Result *= 10;
Result += *Buffer-'0';
if (Result < OldRes) // Uh, oh, overflow detected!!!
error("constant bigger than 64 bits detected!");
}
return Result;
}
static uint64_t HexIntToVal(const char *Buffer) {
uint64_t Result = 0;
for (; *Buffer; ++Buffer) {
uint64_t OldRes = Result;
Result *= 16;
char C = *Buffer;
if (C >= '0' && C <= '9')
Result += C-'0';
else if (C >= 'A' && C <= 'F')
Result += C-'A'+10;
else if (C >= 'a' && C <= 'f')
Result += C-'a'+10;
if (Result < OldRes) // Uh, oh, overflow detected!!!
error("constant bigger than 64 bits detected!");
}
return Result;
}
// HexToFP - Convert the ascii string in hexidecimal format to the floating
// point representation of it.
//
static double HexToFP(const char *Buffer) {
// Behave nicely in the face of C TBAA rules... see:
// http://www.nullstone.com/htmls/category/aliastyp.htm
union {
uint64_t UI;
double FP;
} UIntToFP;
UIntToFP.UI = HexIntToVal(Buffer);
assert(sizeof(double) == sizeof(uint64_t) &&
"Data sizes incompatible on this target!");
return UIntToFP.FP; // Cast Hex constant to double
}
} // End llvm namespace
using namespace llvm;
%}
@ -98,168 +190,219 @@ HexIntConstant [us]0x[0-9A-Fa-f]+
{Comment} { /* Ignore comments for now */ }
begin { RET_TOK( BEGINTOK); }
end { RET_TOK( ENDTOK); }
true { RET_TOK( TRUETOK); }
false { RET_TOK( FALSETOK); }
declare { RET_TOK( DECLARE); }
global { RET_TOK( GLOBAL); }
constant { RET_TOK( CONSTANT); }
internal { RET_TOK( INTERNAL); }
linkonce { RET_TOK( LINKONCE); }
weak { RET_TOK( WEAK); }
appending { RET_TOK( APPENDING); }
dllimport { RET_TOK( DLLIMPORT); }
dllexport { RET_TOK( DLLEXPORT); }
extern_weak { RET_TOK( EXTERN_WEAK); }
external { RET_TOK( EXTERNAL); }
uninitialized { RET_TOK( UNINITIALIZED); } // alias for external
implementation { RET_TOK( IMPLEMENTATION); }
zeroinitializer { RET_TOK( ZEROINITIALIZER); }
\.\.\. { RET_TOK( DOTDOTDOT); }
undef { RET_TOK( UNDEF); }
null { RET_TOK( NULL_TOK); }
to { RET_TOK( TO); }
tail { RET_TOK( TAIL); }
target { RET_TOK( TARGET); }
triple { RET_TOK( TRIPLE); }
deplibs { RET_TOK( DEPLIBS); }
endian { RET_TOK( ENDIAN); }
pointersize { RET_TOK( POINTERSIZE); }
datalayout { RET_TOK( DATALAYOUT); }
little { RET_TOK( LITTLE); }
big { RET_TOK( BIG); }
volatile { RET_TOK( VOLATILE); }
align { RET_TOK( ALIGN); }
section { RET_TOK( SECTION); }
module { RET_TOK( MODULE); }
asm { RET_TOK( ASM_TOK); }
sideeffect { RET_TOK( SIDEEFFECT); }
begin { return BEGINTOK; }
end { return ENDTOK; }
true { return TRUETOK; }
false { return FALSETOK; }
declare { return DECLARE; }
global { return GLOBAL; }
constant { return CONSTANT; }
internal { return INTERNAL; }
linkonce { return LINKONCE; }
weak { return WEAK; }
appending { return APPENDING; }
dllimport { return DLLIMPORT; }
dllexport { return DLLEXPORT; }
extern_weak { return EXTERN_WEAK; }
uninitialized { return EXTERNAL; } /* Deprecated, turn into external */
external { return EXTERNAL; }
implementation { return IMPLEMENTATION; }
zeroinitializer { return ZEROINITIALIZER; }
\.\.\. { return DOTDOTDOT; }
undef { return UNDEF; }
null { return NULL_TOK; }
to { return TO; }
except { return EXCEPT; }
not { return NOT; } /* Deprecated, turned into XOR */
tail { return TAIL; }
target { return TARGET; }
triple { return TRIPLE; }
deplibs { return DEPLIBS; }
endian { return ENDIAN; }
pointersize { return POINTERSIZE; }
datalayout { return DATALAYOUT; }
little { return LITTLE; }
big { return BIG; }
volatile { return VOLATILE; }
align { return ALIGN; }
section { return SECTION; }
module { return MODULE; }
asm { return ASM_TOK; }
sideeffect { return SIDEEFFECT; }
cc { RET_TOK( CC_TOK); }
ccc { RET_TOK( CCC_TOK); }
csretcc { RET_TOK( CSRETCC_TOK); }
fastcc { RET_TOK( FASTCC_TOK); }
coldcc { RET_TOK( COLDCC_TOK); }
x86_stdcallcc { RET_TOK( X86_STDCALLCC_TOK); }
x86_fastcallcc { RET_TOK( X86_FASTCALLCC_TOK); }
cc { return CC_TOK; }
ccc { return CCC_TOK; }
csretcc { return CSRETCC_TOK; }
fastcc { return FASTCC_TOK; }
coldcc { return COLDCC_TOK; }
x86_stdcallcc { return X86_STDCALLCC_TOK; }
x86_fastcallcc { return X86_FASTCALLCC_TOK; }
void { RET_TY(VOID,VoidTy,"void",false); }
bool { RET_TY(BOOL,BoolTy,"i1",false); }
sbyte { RET_TY(SBYTE,SByteTy,"i8",true); }
ubyte { RET_TY(UBYTE,UByteTy,"i8",false); }
short { RET_TY(SHORT,ShortTy,"i16",true); }
ushort { RET_TY(USHORT,UShortTy,"i16",false); }
int { RET_TY(INT,IntTy,"i32",true); }
uint { RET_TY(UINT,UIntTy,"i32",false); }
long { RET_TY(LONG,LongTy,"i64",true); }
ulong { RET_TY(ULONG,ULongTy,"i64",false); }
i8 { RET_TY(UBYTE,UByteTy,"i8",false); }
i16 { RET_TY(USHORT,UShortTy,"i16",false); }
i32 { RET_TY(UINT,UIntTy,"i32",false); }
i64 { RET_TY(ULONG,ULongTy,"i64",false); }
float { RET_TY(FLOAT,FloatTy,"float",false); }
double { RET_TY(DOUBLE,DoubleTy,"double",false); }
label { RET_TY(LABEL,LabelTy,"label",false); }
opaque { RET_TOK(OPAQUE); }
type { RET_TOK(TYPE); }
sbyte { RET_TY(SBYTE, Type::Int8Ty, Signed); }
ubyte { RET_TY(UBYTE, Type::Int8Ty, Unsigned); }
short { RET_TY(SHORT, Type::Int16Ty, Signed); }
ushort { RET_TY(USHORT, Type::Int16Ty, Unsigned); }
int { RET_TY(INT, Type::Int32Ty, Signed); }
uint { RET_TY(UINT, Type::Int32Ty, Unsigned); }
long { RET_TY(LONG, Type::Int64Ty, Signed); }
ulong { RET_TY(ULONG, Type::Int64Ty, Unsigned); }
void { RET_TY(VOID, Type::VoidTy, Signless ); }
bool { RET_TY(BOOL, Type::Int1Ty, Unsigned ); }
float { RET_TY(FLOAT, Type::FloatTy, Signless ); }
double { RET_TY(DOUBLE, Type::DoubleTy,Signless); }
label { RET_TY(LABEL, Type::LabelTy, Signless ); }
type { return TYPE; }
opaque { return OPAQUE; }
add { RET_TOK( ADD); }
sub { RET_TOK( SUB); }
mul { RET_TOK( MUL); }
div { RET_TOK( DIV); }
udiv { RET_TOK( UDIV); }
sdiv { RET_TOK( SDIV); }
fdiv { RET_TOK( FDIV); }
rem { RET_TOK( REM); }
urem { RET_TOK( UREM); }
srem { RET_TOK( SREM); }
frem { RET_TOK( FREM); }
and { RET_TOK( AND); }
or { RET_TOK( OR); }
xor { RET_TOK( XOR); }
setne { RET_TOK( SETNE); }
seteq { RET_TOK( SETEQ); }
setlt { RET_TOK( SETLT); }
setgt { RET_TOK( SETGT); }
setle { RET_TOK( SETLE); }
setge { RET_TOK( SETGE); }
icmp { RET_TOK(ICMP); }
fcmp { RET_TOK(FCMP); }
eq { RET_TOK(EQ); }
ne { RET_TOK(NE); }
slt { RET_TOK(SLT); }
sgt { RET_TOK(SGT); }
sle { RET_TOK(SLE); }
sge { RET_TOK(SGE); }
oeq { RET_TOK(OEQ); }
one { RET_TOK(ONE); }
olt { RET_TOK(OLT); }
ogt { RET_TOK(OGT); }
ole { RET_TOK(OLE); }
oge { RET_TOK(OGE); }
ord { RET_TOK(ORD); }
uno { RET_TOK(UNO); }
ueq { RET_TOK(UEQ); }
une { RET_TOK(UNE); }
ult { RET_TOK(ULT); }
ugt { RET_TOK(UGT); }
ule { RET_TOK(ULE); }
uge { RET_TOK(UGE); }
add { RET_TOK(BinaryOpVal, AddOp, ADD); }
sub { RET_TOK(BinaryOpVal, SubOp, SUB); }
mul { RET_TOK(BinaryOpVal, MulOp, MUL); }
div { RET_TOK(BinaryOpVal, DivOp, DIV); }
udiv { RET_TOK(BinaryOpVal, UDivOp, UDIV); }
sdiv { RET_TOK(BinaryOpVal, SDivOp, SDIV); }
fdiv { RET_TOK(BinaryOpVal, FDivOp, FDIV); }
rem { RET_TOK(BinaryOpVal, RemOp, REM); }
urem { RET_TOK(BinaryOpVal, URemOp, UREM); }
srem { RET_TOK(BinaryOpVal, SRemOp, SREM); }
frem { RET_TOK(BinaryOpVal, FRemOp, FREM); }
and { RET_TOK(BinaryOpVal, AndOp, AND); }
or { RET_TOK(BinaryOpVal, OrOp , OR ); }
xor { RET_TOK(BinaryOpVal, XorOp, XOR); }
setne { RET_TOK(BinaryOpVal, SetNE, SETNE); }
seteq { RET_TOK(BinaryOpVal, SetEQ, SETEQ); }
setlt { RET_TOK(BinaryOpVal, SetLT, SETLT); }
setgt { RET_TOK(BinaryOpVal, SetGT, SETGT); }
setle { RET_TOK(BinaryOpVal, SetLE, SETLE); }
setge { RET_TOK(BinaryOpVal, SetGE, SETGE); }
icmp { RET_TOK(OtherOpVal, ICmpOp, ICMP); }
fcmp { RET_TOK(OtherOpVal, FCmpOp, FCMP); }
phi { RET_TOK( PHI_TOK); }
call { RET_TOK( CALL); }
cast { RET_TOK( CAST); }
trunc { RET_TOK( TRUNC); }
zext { RET_TOK( ZEXT); }
sext { RET_TOK( SEXT); }
fptrunc { RET_TOK( FPTRUNC); }
fpext { RET_TOK( FPEXT); }
fptoui { RET_TOK( FPTOUI); }
fptosi { RET_TOK( FPTOSI); }
uitofp { RET_TOK( UITOFP); }
sitofp { RET_TOK( SITOFP); }
ptrtoint { RET_TOK( PTRTOINT); }
inttoptr { RET_TOK( INTTOPTR); }
bitcast { RET_TOK( BITCAST); }
select { RET_TOK( SELECT); }
shl { RET_TOK( SHL); }
shr { RET_TOK( SHR); }
ashr { RET_TOK( ASHR); }
lshr { RET_TOK( LSHR); }
va_arg { RET_TOK( VAARG); }
ret { RET_TOK( RET); }
br { RET_TOK( BR); }
switch { RET_TOK( SWITCH); }
invoke { RET_TOK( INVOKE); }
unwind { RET_TOK( UNWIND); }
except { RET_TOK( EXCEPT); } // alias for unwind
unreachable { RET_TOK( UNREACHABLE); }
eq { return EQ; }
ne { return NE; }
slt { return SLT; }
sgt { return SGT; }
sle { return SLE; }
sge { return SGE; }
ult { return ULT; }
ugt { return UGT; }
ule { return ULE; }
uge { return UGE; }
oeq { return OEQ; }
one { return ONE; }
olt { return OLT; }
ogt { return OGT; }
ole { return OLE; }
oge { return OGE; }
ord { return ORD; }
uno { return UNO; }
ueq { return UEQ; }
une { return UNE; }
malloc { RET_TOK( MALLOC); }
alloca { RET_TOK( ALLOCA); }
free { RET_TOK( FREE); }
load { RET_TOK( LOAD); }
store { RET_TOK( STORE); }
getelementptr { RET_TOK( GETELEMENTPTR); }
phi { RET_TOK(OtherOpVal, PHIOp, PHI_TOK); }
call { RET_TOK(OtherOpVal, CallOp, CALL); }
cast { RET_TOK(CastOpVal, CastOp, CAST); }
trunc { RET_TOK(CastOpVal, TruncOp, TRUNC); }
zext { RET_TOK(CastOpVal, ZExtOp , ZEXT); }
sext { RET_TOK(CastOpVal, SExtOp, SEXT); }
fptrunc { RET_TOK(CastOpVal, FPTruncOp, FPTRUNC); }
fpext { RET_TOK(CastOpVal, FPExtOp, FPEXT); }
fptoui { RET_TOK(CastOpVal, FPToUIOp, FPTOUI); }
fptosi { RET_TOK(CastOpVal, FPToSIOp, FPTOSI); }
uitofp { RET_TOK(CastOpVal, UIToFPOp, UITOFP); }
sitofp { RET_TOK(CastOpVal, SIToFPOp, SITOFP); }
ptrtoint { RET_TOK(CastOpVal, PtrToIntOp, PTRTOINT); }
inttoptr { RET_TOK(CastOpVal, IntToPtrOp, INTTOPTR); }
bitcast { RET_TOK(CastOpVal, BitCastOp, BITCAST); }
select { RET_TOK(OtherOpVal, SelectOp, SELECT); }
shl { RET_TOK(OtherOpVal, ShlOp, SHL); }
shr { RET_TOK(OtherOpVal, ShrOp, SHR); }
lshr { RET_TOK(OtherOpVal, LShrOp, LSHR); }
ashr { RET_TOK(OtherOpVal, AShrOp, ASHR); }
vanext { return VANEXT_old; }
vaarg { return VAARG_old; }
va_arg { RET_TOK(OtherOpVal, VAArg , VAARG); }
ret { RET_TOK(TermOpVal, RetOp, RET); }
br { RET_TOK(TermOpVal, BrOp, BR); }
switch { RET_TOK(TermOpVal, SwitchOp, SWITCH); }
invoke { RET_TOK(TermOpVal, InvokeOp, INVOKE); }
unwind { return UNWIND; }
unreachable { RET_TOK(TermOpVal, UnreachableOp, UNREACHABLE); }
extractelement { RET_TOK( EXTRACTELEMENT); }
insertelement { RET_TOK( INSERTELEMENT); }
shufflevector { RET_TOK( SHUFFLEVECTOR); }
malloc { RET_TOK(MemOpVal, MallocOp, MALLOC); }
alloca { RET_TOK(MemOpVal, AllocaOp, ALLOCA); }
free { RET_TOK(MemOpVal, FreeOp, FREE); }
load { RET_TOK(MemOpVal, LoadOp, LOAD); }
store { RET_TOK(MemOpVal, StoreOp, STORE); }
getelementptr { RET_TOK(MemOpVal, GetElementPtrOp, GETELEMENTPTR); }
extractelement { RET_TOK(OtherOpVal, ExtractElementOp, EXTRACTELEMENT); }
insertelement { RET_TOK(OtherOpVal, InsertElementOp, INSERTELEMENT); }
shufflevector { RET_TOK(OtherOpVal, ShuffleVectorOp, SHUFFLEVECTOR); }
{VarID} { RET_TOK( VAR_ID); }
{Label} { RET_TOK( LABELSTR); }
{QuoteLabel} { RET_TOK( LABELSTR); }
{StringConstant} { RET_TOK( STRINGCONSTANT ); }
{PInteger} { RET_TOK( EUINT64VAL ); }
{NInteger} { RET_TOK( ESINT64VAL ); }
{HexIntConstant} { RET_TOK( yytext[0] == 's' ? ESINT64VAL : EUINT64VAL ); }
{EPInteger} { RET_TOK( UINTVAL); }
{ENInteger} { RET_TOK( SINTVAL); }
{FPConstant} { RET_TOK( FPVAL); }
{HexFPConstant} { RET_TOK( FPVAL); }
<<EOF>> {
{VarID} {
UnEscapeLexed(yytext+1);
Upgradelval.StrVal = strdup(yytext+1); // Skip %
return VAR_ID;
}
{Label} {
yytext[strlen(yytext)-1] = 0; // nuke colon
UnEscapeLexed(yytext);
Upgradelval.StrVal = strdup(yytext);
return LABELSTR;
}
{QuoteLabel} {
yytext[strlen(yytext)-2] = 0; // nuke colon, end quote
UnEscapeLexed(yytext+1);
Upgradelval.StrVal = strdup(yytext+1);
return LABELSTR;
}
{StringConstant} { // Note that we cannot unescape a string constant here! The
// string constant might contain a \00 which would not be
// understood by the string stuff. It is valid to make a
// [sbyte] c"Hello World\00" constant, for example.
//
yytext[strlen(yytext)-1] = 0; // nuke end quote
Upgradelval.StrVal = strdup(yytext+1); // Nuke start quote
return STRINGCONSTANT;
}
{PInteger} { Upgradelval.UInt64Val = atoull(yytext); return EUINT64VAL; }
{NInteger} {
uint64_t Val = atoull(yytext+1);
// +1: we have bigger negative range
if (Val > (uint64_t)INT64_MAX+1)
error("Constant too large for signed 64 bits!");
Upgradelval.SInt64Val = -Val;
return ESINT64VAL;
}
{HexIntConstant} {
Upgradelval.UInt64Val = HexIntToVal(yytext+3);
return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL;
}
{EPInteger} {
uint64_t Val = atoull(yytext+1);
if ((unsigned)Val != Val)
error("Invalid value number (too large)!");
Upgradelval.UIntVal = unsigned(Val);
return UINTVAL;
}
{ENInteger} {
uint64_t Val = atoull(yytext+2);
// +1: we have bigger negative range
if (Val > (uint64_t)INT32_MAX+1)
error("Constant too large for signed 32 bits!");
Upgradelval.SIntVal = (int)-Val;
return SINTVAL;
}
{FPConstant} { Upgradelval.FPVal = atof(yytext); return FPVAL; }
{HexFPConstant} { Upgradelval.FPVal = HexToFP(yytext); return FPVAL; }
<<EOF>> {
/* Make sure to free the internal buffers for flex when we are
* done reading our input!
*/

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
/* A Bison parser, made from /usr/home/jeffc/llvm/tools/llvm-upgrade/UpgradeParser.y, by GNU bison 1.75. */
/* A Bison parser, made by GNU Bison 2.1. */
/* Skeleton parser for Yacc-like parsing with Bison,
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -15,78 +15,75 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
#ifndef BISON_UPGRADEPARSER_TAB_H
# define BISON_UPGRADEPARSER_TAB_H
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
VOID = 258,
BOOL = 259,
SBYTE = 260,
UBYTE = 261,
SHORT = 262,
USHORT = 263,
INT = 264,
UINT = 265,
LONG = 266,
ULONG = 267,
FLOAT = 268,
DOUBLE = 269,
LABEL = 270,
OPAQUE = 271,
ESINT64VAL = 272,
EUINT64VAL = 273,
SINTVAL = 274,
UINTVAL = 275,
FPVAL = 276,
NULL_TOK = 277,
UNDEF = 278,
ZEROINITIALIZER = 279,
TRUETOK = 280,
FALSETOK = 281,
TYPE = 282,
VAR_ID = 283,
LABELSTR = 284,
STRINGCONSTANT = 285,
IMPLEMENTATION = 286,
BEGINTOK = 287,
ENDTOK = 288,
DECLARE = 289,
GLOBAL = 290,
CONSTANT = 291,
SECTION = 292,
VOLATILE = 293,
TO = 294,
DOTDOTDOT = 295,
CONST = 296,
INTERNAL = 297,
LINKONCE = 298,
WEAK = 299,
ESINT64VAL = 258,
EUINT64VAL = 259,
SINTVAL = 260,
UINTVAL = 261,
FPVAL = 262,
VOID = 263,
BOOL = 264,
SBYTE = 265,
UBYTE = 266,
SHORT = 267,
USHORT = 268,
INT = 269,
UINT = 270,
LONG = 271,
ULONG = 272,
FLOAT = 273,
DOUBLE = 274,
TYPE = 275,
LABEL = 276,
VAR_ID = 277,
LABELSTR = 278,
STRINGCONSTANT = 279,
IMPLEMENTATION = 280,
ZEROINITIALIZER = 281,
TRUETOK = 282,
FALSETOK = 283,
BEGINTOK = 284,
ENDTOK = 285,
DECLARE = 286,
GLOBAL = 287,
CONSTANT = 288,
SECTION = 289,
VOLATILE = 290,
TO = 291,
DOTDOTDOT = 292,
NULL_TOK = 293,
UNDEF = 294,
CONST = 295,
INTERNAL = 296,
LINKONCE = 297,
WEAK = 298,
APPENDING = 299,
DLLIMPORT = 300,
DLLEXPORT = 301,
EXTERN_WEAK = 302,
APPENDING = 303,
EXTERNAL = 304,
TARGET = 305,
TRIPLE = 306,
ENDIAN = 307,
POINTERSIZE = 308,
LITTLE = 309,
BIG = 310,
ALIGN = 311,
UNINITIALIZED = 312,
OPAQUE = 303,
NOT = 304,
EXTERNAL = 305,
TARGET = 306,
TRIPLE = 307,
ENDIAN = 308,
POINTERSIZE = 309,
LITTLE = 310,
BIG = 311,
ALIGN = 312,
DEPLIBS = 313,
CALL = 314,
TAIL = 315,
@ -105,9 +102,9 @@
BR = 328,
SWITCH = 329,
INVOKE = 330,
EXCEPT = 331,
UNREACHABLE = 331,
UNWIND = 332,
UNREACHABLE = 333,
EXCEPT = 333,
ADD = 334,
SUB = 335,
MUL = 336,
@ -130,112 +127,115 @@
SETNE = 353,
ICMP = 354,
FCMP = 355,
EQ = 356,
NE = 357,
SLT = 358,
SGT = 359,
SLE = 360,
SGE = 361,
OEQ = 362,
ONE = 363,
OLT = 364,
OGT = 365,
OLE = 366,
OGE = 367,
ORD = 368,
UNO = 369,
UEQ = 370,
UNE = 371,
ULT = 372,
UGT = 373,
ULE = 374,
UGE = 375,
MALLOC = 376,
ALLOCA = 377,
FREE = 378,
LOAD = 379,
STORE = 380,
GETELEMENTPTR = 381,
PHI_TOK = 382,
SELECT = 383,
SHL = 384,
SHR = 385,
ASHR = 386,
LSHR = 387,
VAARG = 388,
EXTRACTELEMENT = 389,
INSERTELEMENT = 390,
SHUFFLEVECTOR = 391,
CAST = 392,
TRUNC = 393,
ZEXT = 394,
SEXT = 395,
FPTRUNC = 396,
FPEXT = 397,
FPTOUI = 398,
FPTOSI = 399,
UITOFP = 400,
SITOFP = 401,
PTRTOINT = 402,
INTTOPTR = 403,
BITCAST = 404
MALLOC = 356,
ALLOCA = 357,
FREE = 358,
LOAD = 359,
STORE = 360,
GETELEMENTPTR = 361,
PHI_TOK = 362,
SELECT = 363,
SHL = 364,
SHR = 365,
ASHR = 366,
LSHR = 367,
VAARG = 368,
EXTRACTELEMENT = 369,
INSERTELEMENT = 370,
SHUFFLEVECTOR = 371,
VAARG_old = 372,
VANEXT_old = 373,
EQ = 374,
NE = 375,
SLT = 376,
SGT = 377,
SLE = 378,
SGE = 379,
ULT = 380,
UGT = 381,
ULE = 382,
UGE = 383,
OEQ = 384,
ONE = 385,
OLT = 386,
OGT = 387,
OLE = 388,
OGE = 389,
ORD = 390,
UNO = 391,
UEQ = 392,
UNE = 393,
CAST = 394,
TRUNC = 395,
ZEXT = 396,
SEXT = 397,
FPTRUNC = 398,
FPEXT = 399,
FPTOUI = 400,
FPTOSI = 401,
UITOFP = 402,
SITOFP = 403,
PTRTOINT = 404,
INTTOPTR = 405,
BITCAST = 406
};
#endif
#define VOID 258
#define BOOL 259
#define SBYTE 260
#define UBYTE 261
#define SHORT 262
#define USHORT 263
#define INT 264
#define UINT 265
#define LONG 266
#define ULONG 267
#define FLOAT 268
#define DOUBLE 269
#define LABEL 270
#define OPAQUE 271
#define ESINT64VAL 272
#define EUINT64VAL 273
#define SINTVAL 274
#define UINTVAL 275
#define FPVAL 276
#define NULL_TOK 277
#define UNDEF 278
#define ZEROINITIALIZER 279
#define TRUETOK 280
#define FALSETOK 281
#define TYPE 282
#define VAR_ID 283
#define LABELSTR 284
#define STRINGCONSTANT 285
#define IMPLEMENTATION 286
#define BEGINTOK 287
#define ENDTOK 288
#define DECLARE 289
#define GLOBAL 290
#define CONSTANT 291
#define SECTION 292
#define VOLATILE 293
#define TO 294
#define DOTDOTDOT 295
#define CONST 296
#define INTERNAL 297
#define LINKONCE 298
#define WEAK 299
/* Tokens. */
#define ESINT64VAL 258
#define EUINT64VAL 259
#define SINTVAL 260
#define UINTVAL 261
#define FPVAL 262
#define VOID 263
#define BOOL 264
#define SBYTE 265
#define UBYTE 266
#define SHORT 267
#define USHORT 268
#define INT 269
#define UINT 270
#define LONG 271
#define ULONG 272
#define FLOAT 273
#define DOUBLE 274
#define TYPE 275
#define LABEL 276
#define VAR_ID 277
#define LABELSTR 278
#define STRINGCONSTANT 279
#define IMPLEMENTATION 280
#define ZEROINITIALIZER 281
#define TRUETOK 282
#define FALSETOK 283
#define BEGINTOK 284
#define ENDTOK 285
#define DECLARE 286
#define GLOBAL 287
#define CONSTANT 288
#define SECTION 289
#define VOLATILE 290
#define TO 291
#define DOTDOTDOT 292
#define NULL_TOK 293
#define UNDEF 294
#define CONST 295
#define INTERNAL 296
#define LINKONCE 297
#define WEAK 298
#define APPENDING 299
#define DLLIMPORT 300
#define DLLEXPORT 301
#define EXTERN_WEAK 302
#define APPENDING 303
#define EXTERNAL 304
#define TARGET 305
#define TRIPLE 306
#define ENDIAN 307
#define POINTERSIZE 308
#define LITTLE 309
#define BIG 310
#define ALIGN 311
#define UNINITIALIZED 312
#define OPAQUE 303
#define NOT 304
#define EXTERNAL 305
#define TARGET 306
#define TRIPLE 307
#define ENDIAN 308
#define POINTERSIZE 309
#define LITTLE 310
#define BIG 311
#define ALIGN 312
#define DEPLIBS 313
#define CALL 314
#define TAIL 315
@ -254,9 +254,9 @@
#define BR 328
#define SWITCH 329
#define INVOKE 330
#define EXCEPT 331
#define UNREACHABLE 331
#define UNWIND 332
#define UNREACHABLE 333
#define EXCEPT 333
#define ADD 334
#define SUB 335
#define MUL 336
@ -279,76 +279,112 @@
#define SETNE 353
#define ICMP 354
#define FCMP 355
#define EQ 356
#define NE 357
#define SLT 358
#define SGT 359
#define SLE 360
#define SGE 361
#define OEQ 362
#define ONE 363
#define OLT 364
#define OGT 365
#define OLE 366
#define OGE 367
#define ORD 368
#define UNO 369
#define UEQ 370
#define UNE 371
#define ULT 372
#define UGT 373
#define ULE 374
#define UGE 375
#define MALLOC 376
#define ALLOCA 377
#define FREE 378
#define LOAD 379
#define STORE 380
#define GETELEMENTPTR 381
#define PHI_TOK 382
#define SELECT 383
#define SHL 384
#define SHR 385
#define ASHR 386
#define LSHR 387
#define VAARG 388
#define EXTRACTELEMENT 389
#define INSERTELEMENT 390
#define SHUFFLEVECTOR 391
#define CAST 392
#define TRUNC 393
#define ZEXT 394
#define SEXT 395
#define FPTRUNC 396
#define FPEXT 397
#define FPTOUI 398
#define FPTOSI 399
#define UITOFP 400
#define SITOFP 401
#define PTRTOINT 402
#define INTTOPTR 403
#define BITCAST 404
#define MALLOC 356
#define ALLOCA 357
#define FREE 358
#define LOAD 359
#define STORE 360
#define GETELEMENTPTR 361
#define PHI_TOK 362
#define SELECT 363
#define SHL 364
#define SHR 365
#define ASHR 366
#define LSHR 367
#define VAARG 368
#define EXTRACTELEMENT 369
#define INSERTELEMENT 370
#define SHUFFLEVECTOR 371
#define VAARG_old 372
#define VANEXT_old 373
#define EQ 374
#define NE 375
#define SLT 376
#define SGT 377
#define SLE 378
#define SGE 379
#define ULT 380
#define UGT 381
#define ULE 382
#define UGE 383
#define OEQ 384
#define ONE 385
#define OLT 386
#define OGT 387
#define OLE 388
#define OGE 389
#define ORD 390
#define UNO 391
#define UEQ 392
#define UNE 393
#define CAST 394
#define TRUNC 395
#define ZEXT 396
#define SEXT 397
#define FPTRUNC 398
#define FPEXT 399
#define FPTOUI 400
#define FPTOSI 401
#define UITOFP 402
#define SITOFP 403
#define PTRTOINT 404
#define INTTOPTR 405
#define BITCAST 406
#ifndef YYSTYPE
#line 971 "/usr/home/jeffc/llvm/tools/llvm-upgrade/UpgradeParser.y"
typedef union {
std::string* String;
const Type* Ty;
Value* Val;
Constant* Const;
ValueList* ValList;
TypeList* TypeVec;
} yystype;
/* Line 1237 of /usr/local/share/bison/yacc.c. */
#line 347 "UpgradeParser.tab.h"
# define YYSTYPE yystype
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
#line 1469 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y"
typedef union YYSTYPE {
llvm::Module *ModuleVal;
llvm::Function *FunctionVal;
std::pair<llvm::PATypeInfo, char*> *ArgVal;
llvm::BasicBlock *BasicBlockVal;
llvm::TerminatorInst *TermInstVal;
llvm::InstrInfo InstVal;
llvm::ConstInfo ConstVal;
llvm::ValueInfo ValueVal;
llvm::PATypeInfo TypeVal;
llvm::TypeInfo PrimType;
llvm::PHIListInfo PHIList;
std::list<llvm::PATypeInfo> *TypeList;
std::vector<llvm::ValueInfo> *ValueList;
std::vector<llvm::ConstInfo> *ConstVector;
std::vector<std::pair<llvm::PATypeInfo,char*> > *ArgList;
// Represent the RHS of PHI node
std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
llvm::GlobalValue::LinkageTypes Linkage;
int64_t SInt64Val;
uint64_t UInt64Val;
int SIntVal;
unsigned UIntVal;
double FPVal;
bool BoolVal;
char *StrVal; // This memory is strdup'd!
llvm::ValID ValIDVal; // strdup'd memory maybe!
llvm::BinaryOps BinaryOpVal;
llvm::TermOps TermOpVal;
llvm::MemoryOps MemOpVal;
llvm::OtherOps OtherOpVal;
llvm::CastOps CastOpVal;
llvm::ICmpInst::Predicate IPred;
llvm::FCmpInst::Predicate FPred;
llvm::Module::Endianness Endianness;
} YYSTYPE;
/* Line 1447 of yacc.c. */
#line 382 "UpgradeParser.tab.h"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
#endif
extern YYSTYPE Upgradelval;
#endif /* not BISON_UPGRADEPARSER_TAB_H */

File diff suppressed because it is too large Load Diff

View File

@ -20,6 +20,8 @@
//===----------------------------------------------------------------------===//
#include "UpgradeInternals.h"
#include "llvm/Module.h"
#include "llvm/Bytecode/Writer.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/Streams.h"
@ -45,7 +47,11 @@ AddAttrs("add-attrs", cl::desc("Add function result and argument attributes"),
cl::init(false));
static cl::opt<bool>
Debug("debug", cl::desc("Print debug output from yacc parser"),cl::Hidden,
Debug("debug-upgrade-yacc", cl::desc("Print debug output from yacc parser"),
cl::Hidden, cl::init(false));
static cl::opt<bool>
EmitByteCode("emit-bytecode", cl::desc("Emit bytecode instead of assembly"),
cl::init(false));
int main(int argc, char **argv) {
@ -119,7 +125,20 @@ int main(int argc, char **argv) {
return 1;
}
UpgradeAssembly(InputFilename, *In, *Out, Debug, AddAttrs);
Module *M = UpgradeAssembly(InputFilename, *In, Debug, AddAttrs);
if (!M) {
cerr << argv[0] << ": No module returned from assembly parsing\n";
if (!EmitByteCode)
*Out << argv[0] << ": parse failed.";
exit(1);
}
// Finally, print the module on the output stream.
if (EmitByteCode) {
OStream OS(*Out);
WriteBytecodeToFile(M, OS);
} else
M->print(Out);
} catch (const std::string& caught_message) {
cerr << argv[0] << ": " << caught_message << "\n";