Skip to content

Commit 0085c91

Browse files
llvm-4.0 port
1 parent e6ee21f commit 0085c91

File tree

9 files changed

+1015
-560
lines changed

9 files changed

+1015
-560
lines changed

.travis.yml

+18-35
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,22 @@
11
dist: trusty
2-
sudo: required
3-
language: cpp
4-
compiler:
5-
- gcc
2+
sudo: true
3+
language: c++
4+
compiler: clang
65

7-
before_install:
8-
- sudo apt-get update -qq
9-
- sudo apt-get remove -y cmake
10-
- wget https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz -O /tmp/cmake-3.7.2-Linux-x86_64.tar.gz
11-
- sudo tar -xf /tmp/cmake-3.7.2-Linux-x86_64.tar.gz -C /tmp
12-
- sudo cp -RT /tmp/cmake-3.7.2-Linux-x86_64 /usr
13-
14-
install:
15-
- mkdir third_party
16-
- cd third_party
17-
- wget http://releases.llvm.org/3.8.1/llvm-3.8.1.src.tar.xz -O /tmp/llvm-3.8.1.src.tar.xz
18-
- tar -xf /tmp/llvm-3.8.1.src.tar.xz
19-
- cd llvm-3.8.1.src
20-
- mkdir build
21-
- cd build
22-
- cmake
23-
-DCMAKE_BUILD_TYPE=Release
24-
-DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/third_party/llvm-38
25-
-DLLVM_TARGETS_TO_BUILD=X86
26-
-DLLVM_BUILD_TOOLS=OFF
27-
..
28-
- make -j4
29-
- make install
30-
- cd $TRAVIS_BUILD_DIR
6+
addons:
7+
apt:
8+
sources:
9+
- llvm-toolchain-trusty-4.0
10+
packages:
11+
- cmake
12+
- cmake-data
13+
- llvm-4.0
14+
- llvm-4.0-dev
3115

3216
script:
33-
- mkdir build
34-
- cd build
35-
- cmake
36-
-DCMAKE_BUILD_TYPE=Release
37-
-DCMAKE_PREFIX_PATH=${TRAVIS_BUILD_DIR}/third_party/llvm-38
38-
..
39-
- make -j4
17+
- rm -rf build
18+
- mkdir build
19+
- pushd build
20+
- cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_DIR="/usr/lib/llvm-4.0/lib/cmake/llvm/" ..
21+
- cmake --build .
22+
- popd

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ set(SOURCE_FILES
2020
${SRC_DIR}/main.cpp)
2121

2222

23-
find_package(LLVM 3.8 REQUIRED)
23+
find_package(LLVM 4.0 REQUIRED)
2424
include_directories(${LLVM_INCLUDE_DIRS})
2525
link_directories(${LLVM_LIBRARY_DIRS})
2626
add_definitions(${LLVM_DEFINITIONS})

src/AsmParser/LLLexer.cpp

+57-24
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,18 @@
1010
//===----------------------------------------------------------------------===//
1111

1212
#include "LLLexer.h"
13+
#include <llvm/ADT/APInt.h>
14+
#include <llvm/ADT/STLExtras.h>
1315
#include <llvm/ADT/StringExtras.h>
1416
#include <llvm/ADT/Twine.h>
15-
#include <llvm/AsmParser/Parser.h>
1617
#include <llvm/IR/DerivedTypes.h>
1718
#include <llvm/IR/Instruction.h>
18-
#include <llvm/IR/LLVMContext.h>
1919
#include <llvm/Support/ErrorHandling.h>
20-
#include <llvm/Support/MathExtras.h>
21-
#include <llvm/Support/MemoryBuffer.h>
2220
#include <llvm/Support/SourceMgr.h>
23-
#include <llvm/Support/raw_ostream.h>
21+
#include <cassert>
2422
#include <cctype>
2523
#include <cstdio>
26-
#include <cstdlib>
27-
#include <cstring>
24+
2825
using namespace llvm;
2926

3027
bool LLLexer::Error(LocTy ErrorLoc, const Twine &Msg) const {
@@ -145,18 +142,15 @@ static bool isLabelChar(char C) {
145142
C == '.' || C == '_';
146143
}
147144

148-
149145
/// isLabelTail - Return true if this pointer points to a valid end of a label.
150146
static const char *isLabelTail(const char *CurPtr) {
151-
while (1) {
147+
while (true) {
152148
if (CurPtr[0] == ':') return CurPtr+1;
153149
if (!isLabelChar(CurPtr[0])) return nullptr;
154150
++CurPtr;
155151
}
156152
}
157153

158-
159-
160154
//===----------------------------------------------------------------------===//
161155
// Lexer definition.
162156
//===----------------------------------------------------------------------===//
@@ -247,7 +241,7 @@ lltok::Kind LLLexer::LexToken() {
247241
}
248242

249243
void LLLexer::SkipLineComment() {
250-
while (1) {
244+
while (true) {
251245
if (CurPtr[0] == '\n' || CurPtr[0] == '\r' || getNextChar() == EOF)
252246
return;
253247
}
@@ -272,7 +266,7 @@ lltok::Kind LLLexer::LexDollar() {
272266
if (CurPtr[0] == '"') {
273267
++CurPtr;
274268

275-
while (1) {
269+
while (true) {
276270
int CurChar = getNextChar();
277271

278272
if (CurChar == EOF) {
@@ -301,7 +295,7 @@ lltok::Kind LLLexer::LexDollar() {
301295
/// ReadString - Read a string until the closing quote.
302296
lltok::Kind LLLexer::ReadString(lltok::Kind kind) {
303297
const char *Start = CurPtr;
304-
while (1) {
298+
while (true) {
305299
int CurChar = getNextChar();
306300

307301
if (CurChar == EOF) {
@@ -339,7 +333,7 @@ lltok::Kind LLLexer::LexVar(lltok::Kind Var, lltok::Kind VarID) {
339333
if (CurPtr[0] == '"') {
340334
++CurPtr;
341335

342-
while (1) {
336+
while (true) {
343337
int CurChar = getNextChar();
344338

345339
if (CurChar == EOF) {
@@ -489,11 +483,12 @@ lltok::Kind LLLexer::LexIdentifier() {
489483
CurPtr = KeywordEnd;
490484
--StartChar;
491485
StringRef Keyword(StartChar, CurPtr - StartChar);
486+
492487
#define KEYWORD(STR) \
493488
do { \
494489
if (Keyword == #STR) \
495490
return lltok::kw_##STR; \
496-
} while (0)
491+
} while (false)
497492

498493
KEYWORD(true); KEYWORD(false);
499494
KEYWORD(declare); KEYWORD(define);
@@ -514,6 +509,7 @@ lltok::Kind LLLexer::LexIdentifier() {
514509
KEYWORD(hidden);
515510
KEYWORD(protected);
516511
KEYWORD(unnamed_addr);
512+
KEYWORD(local_unnamed_addr);
517513
KEYWORD(externally_initialized);
518514
KEYWORD(extern_weak);
519515
KEYWORD(external);
@@ -534,6 +530,7 @@ lltok::Kind LLLexer::LexIdentifier() {
534530
KEYWORD(notail);
535531
KEYWORD(target);
536532
KEYWORD(triple);
533+
KEYWORD(source_filename);
537534
KEYWORD(unwind);
538535
KEYWORD(deplibs); // FIXME: Remove in 4.0.
539536
KEYWORD(datalayout);
@@ -556,10 +553,12 @@ lltok::Kind LLLexer::LexIdentifier() {
556553
KEYWORD(nsw);
557554
KEYWORD(exact);
558555
KEYWORD(inbounds);
556+
KEYWORD(inrange);
559557
KEYWORD(align);
560558
KEYWORD(addrspace);
561559
KEYWORD(section);
562560
KEYWORD(alias);
561+
KEYWORD(ifunc);
563562
KEYWORD(module);
564563
KEYWORD(asm);
565564
KEYWORD(sideeffect);
@@ -580,14 +579,18 @@ lltok::Kind LLLexer::LexIdentifier() {
580579
KEYWORD(arm_aapcscc);
581580
KEYWORD(arm_aapcs_vfpcc);
582581
KEYWORD(msp430_intrcc);
582+
KEYWORD(avr_intrcc);
583+
KEYWORD(avr_signalcc);
583584
KEYWORD(ptx_kernel);
584585
KEYWORD(ptx_device);
585586
KEYWORD(spir_kernel);
586587
KEYWORD(spir_func);
587588
KEYWORD(intel_ocl_bicc);
588589
KEYWORD(x86_64_sysvcc);
589590
KEYWORD(x86_64_win64cc);
591+
KEYWORD(x86_regcallcc);
590592
KEYWORD(webkit_jscc);
593+
KEYWORD(swiftcc);
591594
KEYWORD(anyregcc);
592595
KEYWORD(preserve_mostcc);
593596
KEYWORD(preserve_allcc);
@@ -596,13 +599,19 @@ lltok::Kind LLLexer::LexIdentifier() {
596599
KEYWORD(hhvmcc);
597600
KEYWORD(hhvm_ccc);
598601
KEYWORD(cxx_fast_tlscc);
602+
KEYWORD(amdgpu_vs);
603+
KEYWORD(amdgpu_gs);
604+
KEYWORD(amdgpu_ps);
605+
KEYWORD(amdgpu_cs);
606+
KEYWORD(amdgpu_kernel);
599607

600608
KEYWORD(cc);
601609
KEYWORD(c);
602610

603611
KEYWORD(attributes);
604612

605613
KEYWORD(alwaysinline);
614+
KEYWORD(allocsize);
606615
KEYWORD(argmemonly);
607616
KEYWORD(builtin);
608617
KEYWORD(byval);
@@ -646,7 +655,10 @@ lltok::Kind LLLexer::LexIdentifier() {
646655
KEYWORD(sanitize_address);
647656
KEYWORD(sanitize_thread);
648657
KEYWORD(sanitize_memory);
658+
KEYWORD(swifterror);
659+
KEYWORD(swiftself);
649660
KEYWORD(uwtable);
661+
KEYWORD(writeonly);
650662
KEYWORD(zeroext);
651663

652664
KEYWORD(type);
@@ -683,6 +695,7 @@ lltok::Kind LLLexer::LexIdentifier() {
683695
KEYWORD(cleanup);
684696
KEYWORD(catch);
685697
KEYWORD(filter);
698+
686699
#undef KEYWORD
687700

688701
// Keywords for types.
@@ -693,6 +706,7 @@ lltok::Kind LLLexer::LexIdentifier() {
693706
return lltok::Type; \
694707
} \
695708
} while (false)
709+
696710
TYPEKEYWORD("void", Type::getVoidTy(Context));
697711
TYPEKEYWORD("half", Type::getHalfTy(Context));
698712
TYPEKEYWORD("float", Type::getFloatTy(Context));
@@ -704,6 +718,7 @@ lltok::Kind LLLexer::LexIdentifier() {
704718
TYPEKEYWORD("metadata", Type::getMetadataTy(Context));
705719
TYPEKEYWORD("x86_mmx", Type::getX86_MMXTy(Context));
706720
TYPEKEYWORD("token", Type::getTokenTy(Context));
721+
707722
#undef TYPEKEYWORD
708723

709724
// Keywords for instructions.
@@ -768,6 +783,7 @@ lltok::Kind LLLexer::LexIdentifier() {
768783
INSTKEYWORD(catchswitch, CatchSwitch);
769784
INSTKEYWORD(catchpad, CatchPad);
770785
INSTKEYWORD(cleanuppad, CleanupPad);
786+
771787
#undef INSTKEYWORD
772788

773789
#define DWKEYWORD(TYPE, TOKEN) \
@@ -777,19 +793,33 @@ lltok::Kind LLLexer::LexIdentifier() {
777793
return lltok::TOKEN; \
778794
} \
779795
} while (false)
796+
780797
DWKEYWORD(TAG, DwarfTag);
781798
DWKEYWORD(ATE, DwarfAttEncoding);
782799
DWKEYWORD(VIRTUALITY, DwarfVirtuality);
783800
DWKEYWORD(LANG, DwarfLang);
801+
DWKEYWORD(CC, DwarfCC);
784802
DWKEYWORD(OP, DwarfOp);
785803
DWKEYWORD(MACINFO, DwarfMacinfo);
804+
786805
#undef DWKEYWORD
787806

788807
if (Keyword.startswith("DIFlag")) {
789808
StrVal.assign(Keyword.begin(), Keyword.end());
790809
return lltok::DIFlag;
791810
}
792811

812+
if (Keyword.startswith("CSK_")) {
813+
StrVal.assign(Keyword.begin(), Keyword.end());
814+
return lltok::ChecksumKind;
815+
}
816+
817+
if (Keyword == "NoDebug" || Keyword == "FullDebug" ||
818+
Keyword == "LineTablesOnly") {
819+
StrVal.assign(Keyword.begin(), Keyword.end());
820+
return lltok::EmissionKind;
821+
}
822+
793823
// Check for [us]0x[0-9A-Fa-f]+ which are Hexadecimal constant generated by
794824
// the CFE to avoid forcing it to deal with 64-bit numbers.
795825
if ((TokStart[0] == 'u' || TokStart[0] == 's') &&
@@ -798,7 +828,7 @@ lltok::Kind LLLexer::LexIdentifier() {
798828
int len = CurPtr-TokStart-3;
799829
uint32_t bits = len * 4;
800830
StringRef HexStr(TokStart + 3, len);
801-
if (!std::all_of(HexStr.begin(), HexStr.end(), isxdigit)) {
831+
if (!all_of(HexStr, isxdigit)) {
802832
// Bad token, return it as an error.
803833
CurPtr = TokStart+3;
804834
return lltok::Error;
@@ -852,7 +882,8 @@ lltok::Kind LLLexer::Lex0x() {
852882
// HexFPConstant - Floating point constant represented in IEEE format as a
853883
// hexadecimal number for when exponential notation is not precise enough.
854884
// Half, Float, and double only.
855-
APFloatVal = APFloat(BitsToDouble(HexIntToVal(TokStart+2, CurPtr)));
885+
APFloatVal = APFloat(APFloat::IEEEdouble(),
886+
APInt(64, HexIntToVal(TokStart + 2, CurPtr)));
856887
return lltok::APFloat;
857888
}
858889

@@ -862,20 +893,20 @@ lltok::Kind LLLexer::Lex0x() {
862893
case 'K':
863894
// F80HexFPConstant - x87 long double in hexadecimal format (10 bytes)
864895
FP80HexToIntPair(TokStart+3, CurPtr, Pair);
865-
APFloatVal = APFloat(APFloat::x87DoubleExtended, APInt(80, Pair));
896+
APFloatVal = APFloat(APFloat::x87DoubleExtended(), APInt(80, Pair));
866897
return lltok::APFloat;
867898
case 'L':
868899
// F128HexFPConstant - IEEE 128-bit in hexadecimal format (16 bytes)
869900
HexToIntPair(TokStart+3, CurPtr, Pair);
870-
APFloatVal = APFloat(APFloat::IEEEquad, APInt(128, Pair));
901+
APFloatVal = APFloat(APFloat::IEEEquad(), APInt(128, Pair));
871902
return lltok::APFloat;
872903
case 'M':
873904
// PPC128HexFPConstant - PowerPC 128-bit in hexadecimal format (16 bytes)
874905
HexToIntPair(TokStart+3, CurPtr, Pair);
875-
APFloatVal = APFloat(APFloat::PPCDoubleDouble, APInt(128, Pair));
906+
APFloatVal = APFloat(APFloat::PPCDoubleDouble(), APInt(128, Pair));
876907
return lltok::APFloat;
877908
case 'H':
878-
APFloatVal = APFloat(APFloat::IEEEhalf,
909+
APFloatVal = APFloat(APFloat::IEEEhalf(),
879910
APInt(16,HexIntToVal(TokStart+3, CurPtr)));
880911
return lltok::APFloat;
881912
}
@@ -942,7 +973,8 @@ lltok::Kind LLLexer::LexDigitOrNegative() {
942973
}
943974
}
944975

945-
APFloatVal = APFloat(std::atof(TokStart));
976+
APFloatVal = APFloat(APFloat::IEEEdouble(),
977+
StringRef(TokStart, CurPtr - TokStart));
946978
return lltok::APFloat;
947979
}
948980

@@ -978,6 +1010,7 @@ lltok::Kind LLLexer::LexPositive() {
9781010
}
9791011
}
9801012

981-
APFloatVal = APFloat(std::atof(TokStart));
1013+
APFloatVal = APFloat(APFloat::IEEEdouble(),
1014+
StringRef(TokStart, CurPtr - TokStart));
9821015
return lltok::APFloat;
9831016
}

0 commit comments

Comments
 (0)