aboutsummaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2014-04-25Don't align member functions.Dan Gohman
Emscripten uses the ARM ABI for pointers to member functions and doesn't require that member functions are aligned.
2014-04-25Introduce an Emscripten C++ ABI.Dan Gohman
Emscripten uses the Itanium C++ ABI for most things, except that it uses ARM C++ ABI pointers to member functions, to avoid the overhead of aligning functions.
2014-04-09set the emscripten backend's atomic widths to 32Alon Zakai
2014-03-03Set the natural stack alignment for asm.js to 16 bytes.Dan Gohman
2014-03-03Fix handling of byval arguments to set the alignment properly.Dan Gohman
Also, fix the way we override DefaultABIInfo methods, since classifyArgumentType and classifyReturnType are not actually virtual. Also, DefaultABIInfo does the right thing for floating-point types, so we don't need to special-case them.
2014-02-28Drop addAsmMemoryAroundSyncSynchronize() and asmMemoryIsFence().Dan Gohman
For us, staying in sync with upstream on issues related to the memory model is more important. None of clang, gcc, nor icc appear to offer these features. If such features are desirable, they should ideally be implemented in upstream clang, in a target-independent way, since this issue would affect users of all platforms which support threads, not just PNaCl or Emscripten.
2014-02-24Define an Emscripten toolchain.Dan Gohman
This is pretty minimal right now; eventually this may subsume code currently in the emscripten wrapper scripts.
2014-02-24Introduce the asmjs-unknown-emscripten target triple.Dan Gohman
Notable changes from le32-unknown-nacl so far include: - Set i32 as the legal integer set, to help the optimizer avoid creating needlessly inefficient code for asm.js. - We can use llvm.pow. - Don't predefine __ELF__ or __pnacl__ so that we don't need to undefine them later. - Do predefine asm.js and Emscripten macros, so that we don't need to define them later. - Don't provide __has_feature(pnacl).
2013-11-08Cherrypick upstream r183033: Add support for optimized (non-generic) atomic ↵JF Bastien
libcalls. For integer types of sizes 1, 2, 4 and 8, libcompiler-rt (and libgcc) provide atomic functions that pass parameters by value and return results directly. libgcc and libcompiler-rt only provide optimized libcalls for __atomic_fetch_*, as generic libcalls on non-integer types would make little sense. This means that we can finally make __atomic_fetch_* work on architectures for which we don't provide these operations as builtins (e.g. ARM). This should fix the dreaded "cannot compile this atomic library call yet" error that would pop up once every while. These code generation issues are encountered because PNaCl doesn't inline some of the atomic instructions, whereas other targets do. This patch is just after the 3.3 branch and applies cleanly, but it doesn't fix all issues: there is still at least one with atomic operations on pointers which isn't as clean to fix as applying one patch, so I'll leave that one as-is for now. R=dschuff@chromium.org BUG= https://code.google.com/p/nativeclient/issues/detail?id=3623 TEST= ./pnacl/scripts/llvm-test.py --libcxx-tests Review URL: https://codereview.chromium.org/59793007
2013-10-28Cherry-pick upstream clang r193506: "Define [U]LLONG_{MIN,MAX} for C++11, ↵JF Bastien
add tests." This is needed for libc++ testing with newlib. R=dschuff@chromium.org BUG= https://code.google.com/p/nativeclient/issues/detail?id=3623 TEST= ./pnacl/scripts/llvm-test.py --libcxx-tests Review URL: https://codereview.chromium.org/47573003
2013-08-07Treat __sync_synchronize and asm("":::"memory") as stronger fences.JF Bastien
This is a companion patch to: https://codereview.chromium.org/22240002/ https://codereview.chromium.org/22474008/ and deals with the Clang-side of things. The above patch will handle the fallouts of this Clang patch, including some changes to un-duplicate work that RewriteAsmDirectives.cpp does. The goal of this patch is to force some extra ordering on non-atomics for le32 which LLVM doesn't necessarily provide. R=eliben@chromium.org TEST= ninja check-all BUG= https://code.google.com/p/nativeclient/issues/detail?id=3475 BUG= https://code.google.com/p/nativeclient/issues/detail?id=3611 Review URL: https://codereview.chromium.org/22294002
2013-07-25Change __cyg_profile_func_enter/exit to __pnacl_profile... and change the ↵Robert Grosse
signature. __pnacl_profile_function_x takes a single argument - the name of the current function as a constant string, rather than a pair of function addresses like __cyg takes. This makes it work even in PNaCl and removes the need to track symbol information separately. BUG=none R=dschuff@chromium.org Review URL: https://codereview.chromium.org/20000003
2013-07-25Add a -finstrument-functions-size=n option to control basic blockRobert Grosse
filtering. If omitted entirely, the original behavior is restored. This also undos the string and __pnacl_profile stuff from the previous CL. Finally, it fixes and updates the -finstrument-function tests. BUG=none R=bradnelson@google.com, dschuff@chromium.org Review URL: https://codereview.chromium.org/19793007
2013-07-22Cherrypick upstream volatile _Complex alignment patchesJF Bastien
Specifically: r186564 - Fix volatile _Complex alignment test on platforms where 64-bit floating point isn't 64-bit aligned r186490 - Propagate alignment for _Complex These should fix GCC torture test failures, as well as the all-important uses of volatile _Complex numbers in C, and their alignment being incorrect. BUG= PNaCl FYI bots red on torture tests TEST= ./tools/toolchain_tester/torture_test.py pnacl x86-64 --concurrency=32 >& torture-x86-64.log ; ./tools/toolchain_tester/torture_test.py pnacl x86-32 --concurrency=32 >& torture-x86-32.log ; ./tools/toolchain_tester/torture_test.py pnacl arm --concurrency=32 >& torture-arm.log R=stichnot@chromium.org Review URL: https://codereview.chromium.org/19915003
2013-07-16Mop up errors - now it compiles.Eli Bendersky
2013-07-15Merge commit '20c7d45a4da9f58ad805ad1d37f92fe7dc232ec8'Eli Bendersky
Conflicts: lib/CodeGen/ItaniumCXXABI.cpp
2013-07-12Merge branch 'master' of http://git.chromium.org/native_client/pnacl-clangEli Bendersky
2013-07-10Cherry-picking the pow-for-le32 fix from upstream clang.Eli Bendersky
SVN log from upstream clang: r185568 | eliben | 2013-07-03 12:19:12 -0700 (Wed, 03 Jul 2013) Add target hook CodeGen queries when generating builtin pow*. Without fmath-errno, Clang currently generates calls to @llvm.pow.* intrinsics when it sees pow*(). This may not be suitable for all targets (for example le32/PNaCl), so the attached patch adds a target hook that CodeGen queries. The target can state its preference for having or not having the intrinsic generated. Non-PNaCl behavior remains unchanged; PNaCl-specific test added. BUG= https://code.google.com/p/nativeclient/issues/detail?id=3513 R=dschuff@chromium.org Review URL: https://codereview.chromium.org/18953003
2013-06-27Clang should not generate calls to llvm.pow.* intrinsics.Eli Bendersky
Instead, it should generate calls to the pow* library functions, which get found within the pexe. This is a LOCALMOD for now, but I'm working on a more generic solution that can be upstreamed to Clang. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3513 R=jvoung@chromium.org Review URL: https://codereview.chromium.org/18135002
2013-06-24Switch back to non-ARM ABI for C++ guard variables under PNaClMark Seaborn
My previous change set IsARM=true for PNaCl in ItaniumCXXABI.cpp. This gives us ARM-style representation of method pointers, which we want, and ARM-style usage of guard variables, which we don't necessarily want. Switch the latter back so that the guard variable is tested via "load i8 and compare with zero" rather than a "load i32 and test the bottom bit". This should make the Clang-generated code match with how libstdc++ is using the guard variable. This makes the code match the patch I sent upstream (which hasn't been committed yet). BUG=https://code.google.com/p/nativeclient/issues/detail?id=3450 TEST=test/CodeGenCXX/static-init-pnacl.cpp Review URL: https://codereview.chromium.org/17616003
2013-06-19Use ARM-style representation for C++ method pointers under PNaClMark Seaborn
This avoids baking into pexes an assumption that function pointers are 0 mod 2, which might not be the case in future sandboxing models. BUG=https://code.google.com/p/nativeclient/issues/detail?id=3450 TEST=run_method_pointer_repr_test in NaCl + llvm-lit test Review URL: https://codereview.chromium.org/17419005
2013-05-30Merging r182645:Bill Wendling
------------------------------------------------------------------------ r182645 | eugenis | 2013-05-24 07:28:03 -0700 (Fri, 24 May 2013) | 6 lines Add -lrt to sanitizer link arguments. Sanitizer runtime intercepts functions from librt. Not doing this will fail if the librt dependency is not present at program startup (ex. comes from a dlopen()ed library). ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_33@182944 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-21Reverting r182337, which merged r182266, __declspec(selectany)Reid Kleckner
Was "Implement __declspec(selectany) under -fms-extensions ..." git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_33@182381 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-21Merging r181342:Bill Wendling
------------------------------------------------------------------------ r181342 | rsmith | 2013-05-07 12:32:56 -0700 (Tue, 07 May 2013) | 4 lines C++1y: Update __cplusplus to temporary value 201305L to allow detection of provisional C++1y support. Add __has_feature and __has_extension checks for C++1y features (based on the provisional names from the C++ features study group), and update documentation to match. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_33@182340 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-21Merging r182266:Bill Wendling
------------------------------------------------------------------------ r182266 | rnk | 2013-05-20 07:02:37 -0700 (Mon, 20 May 2013) | 13 lines Implement __declspec(selectany) under -fms-extensions selectany only applies to externally visible global variables. It has the effect of making the data weak_odr. The MSDN docs suggest that unused definitions can only be dropped at linktime, so Clang uses weak instead of linkonce. MSVC optimizes away references to constant selectany data, so it must assume that there is only one definition, hence weak_odr. Reviewers: espindola Differential Revision: http://llvm-reviews.chandlerc.com/D814 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_33@182337 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-17Merging r182072:Bill Wendling
------------------------------------------------------------------------ r182072 | rsmith | 2013-05-16 19:19:35 -0700 (Thu, 16 May 2013) | 6 lines PR15757: When we instantiate an inheriting constructor template, also instantiate the inherited constructor template and mark that as the constructor which the instantiated specialization is inheriting. This fixes a crash-on-valid when trying to compute the exception specification of a specialization of the inheriting constructor. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_33@182150 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-15Merging r181750:Bill Wendling
------------------------------------------------------------------------ r181750 | rafael | 2013-05-13 17:44:24 -0700 (Mon, 13 May 2013) | 4 lines Use atomic instructions on linux thumb v7. This matches gcc's behaviour. The patch also explicitly parses the version so that this keeps working when we add support for v8. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_33@181920 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-15Merging r181728:Bill Wendling
------------------------------------------------------------------------ r181728 | rafael | 2013-05-13 13:09:47 -0700 (Mon, 13 May 2013) | 6 lines Use atomic instructions on ARM linux. This is safe given how the pre-v6 atomic ops funcions in libgcc are implemented. This fixes pr15429. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_33@181919 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-08Merging r181368:Bill Wendling
------------------------------------------------------------------------ r181368 | rsmith | 2013-05-07 14:53:22 -0700 (Tue, 07 May 2013) | 3 lines Don't crash in IRGen if a conditional with 'throw' in one of its branches is used as a branch condition. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_33@181401 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06DebugInfo: Support imported modules (using directives) within lexical blocks.David Blaikie
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181272 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06[analyzer; alternate arrows] don't increment the path iterator when we just ↵Ted Kremenek
deleted the next iterator. This is an optimization. It is possible that by deleting the next edge we will pattern match again at the current spot. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181256 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Grab-bag of bit-field fixes:John McCall
- References to ObjC bit-field ivars are bit-field lvalues; fixes rdar://13794269, which got me started down this. - Introduce Expr::refersToBitField, switch a couple users to it where semantically important, and comment the difference between this and the existing API. - Discourage Expr::getBitField by making it a bit longer and less general-sounding. - Lock down on const_casts of bit-field gl-values until we hear back from the committee as to whether they're allowed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181252 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Add missing initialization for Sema::CurScope. This is important for AST ↵Richard Smith
consumers which don't create a Parser. Pointed out by Tom Honermann. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181251 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Move PragmaCommentHandler to lib/Parse in preparation for calling SemaReid Kleckner
Summary: No functionality change. The existing tests for this pragma only verify that we can preprocess it. Reviewers: rsmith CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D751 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181246 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Modify ASTReaderListener to allow visiting the input files of an AST file.Argyrios Kyrtzidis
We can pass such an input-file-visiting ASTReaderListener to ASTReader::readASTFileControlBlock. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181238 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06[analyzer] Remove now-unused bindCompoundLiteral helper function.Jordan Rose
The one user has been changed to use getLValue on the compound literal expression and then use the normal bindLoc to assign a value. No need to special case this in the StoreManager. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181214 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06[analyzer] Handle CXXTemporaryObjectExprs in compound literals.Jordan Rose
This occurs because in C++11 the compound literal syntax can trigger a constructor call via list-initialization. That is, "Point{x, y}" and "(Point){x, y}" end up being equivalent. If this occurs, the inner CXXConstructExpr will have already handled the object construction; the CompoundLiteralExpr just needs to propagate that value forwards. <rdar://problem/13804098> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181213 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Fix representation of compound literals for C++ objects with destructors.Jordan Rose
Previously, this compound literal expression (a GNU extension in C++): (AggregateWithDtor){1, 2} resulted in this AST: `-CXXBindTemporaryExpr [...] 'struct Point' (CXXTemporary [...]) `-CompoundLiteralExpr [...] 'struct AggregateWithDtor' `-CXXBindTemporaryExpr [...] 'struct AggregateWithDtor' (CXXTemporary [...]) `-InitListExpr [...] 'struct AggregateWithDtor' |-IntegerLiteral [...] 'int' 1 `-IntegerLiteral [...] 'int' 2 Note the two CXXBindTemporaryExprs. The InitListExpr is really part of the CompoundLiteralExpr, not an object in its own right. By introducing a new entity initialization kind in Sema specifically for compound literals, we avoid the treatment of the inner InitListExpr as a temporary. `-CXXBindTemporaryExpr [...] 'struct Point' (CXXTemporary [...]) `-CompoundLiteralExpr [...] 'struct AggregateWithDtor' `-InitListExpr [...] 'struct AggregateWithDtor' |-IntegerLiteral [...] 'int' 1 `-IntegerLiteral [...] 'int' 2 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181212 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Add SystemZ supportUlrich Weigand
This patch then adds all the usual platform-specific pieces for SystemZ: driver support, basic target info, register names and constraints, ABI info and vararg support. It also adds new tests to verify pre-defined macros and inline asm, and updates a test for the minimum alignment change. This version of the patch incorporates feedback from reviews by Eric Christopher and John McCall. Thanks to all reviewers! Patch by Richard Sandiford. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181211 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Allow targets to define minimum alignment for global variablesUlrich Weigand
This patch adds a new common code feature that allows platform code to request minimum alignment of global symbols. The background for this is that on SystemZ, the most efficient way to load addresses of global symbol is the LOAD ADDRESS RELATIVE LONG (LARL) instruction. This instruction provides PC-relative addressing, but only to *even* addresses. For this reason, existing compilers will guarantee that global symbols are always aligned to at least 2. [ Since symbols would otherwise already use a default alignment based on their type, this will usually only affect global objects of character type or character arrays. ] GCC also allows creating symbols without that extra alignment by using explicit "aligned" attributes (which then need to be used on both definition and each use of the symbol). To enable support for this with Clang, this patch adds a TargetInfo::MinGlobalAlign variable that provides a global minimum for the alignment of every global object (unless overridden via explicit alignment attribute), and adds code to respect this setting. Within this patch, no platform actually sets the value to anything but the default 1, resulting in no change in behaviour on any existing target. This version of the patch incorporates feedback from reviews by Eric Christopher and John McCall. Thanks to all reviewers! Patch by Richard Sandiford. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181210 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06R600: Update GPU variants in -mcpu optionTom Stellard
We've added the RS880 variant in the LLVM backend to represent an R600 GPU with no vertex cache, so we need to update the GPU mappings for -mcpu. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181202 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Add llvm_unreachable at end of fully covered switchHans Wennborg
To pacify GCC warning about control reaching end of non-void function. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181197 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Added Mozilla style, cleaned get*Style methods.Alexander Kornienko
Summary: Patch based on a patch by Ehsan Akhgari. Reviewers: djasper Reviewed By: djasper CC: cfe-commits, klimek Differential Revision: http://llvm-reviews.chandlerc.com/D750 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181196 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Don't break comments after includes.Daniel Jasper
LLVM/Clang basically don't use such comments and for Google-style, include-lines are explicitly exempt from the column limit. Also, for most cases, where the column limit is violated, the "better" solution would be to move the comment to before the include, which clang-format cannot do (yet). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181191 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Change indentation when breaking after a type.Daniel Jasper
clang-format did not indent any declarations/definitions when breaking after the type. With this change, it indents for all declarations but does not indent for function definitions, i.e.: Before: const SomeLongTypeName& some_long_variable_name; typedef SomeLongTypeName SomeLongTypeAlias; const SomeLongReturnType* SomeLongFunctionName(); const SomeLongReturnType* SomeLongFunctionName() { ... } After: const SomeLongTypeName& some_long_variable_name; typedef SomeLongTypeName SomeLongTypeAlias; const SomeLongReturnType* SomeLongFunctionName(); const SomeLongReturnType* SomeLongFunctionName() { ... } While it might seem inconsistent to indent function declarations, but not definitions, there are two reasons for that: - Function declarations are very similar to declarations of function type variables, so there is another side to consistency to consider. - There can be many function declarations on subsequent lines and not indenting can make them harder to identify. Function definitions are already separated by their body and not indenting makes the function name slighly easier to find. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181187 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Require the containing type to be complete when we seeJohn McCall
__alignof__ of a field. This problem can only happen in C++11. Also do some petty optimizations. rdar://13784901 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181185 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06C++1y: support range-based for loops in constant expressions.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181184 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Break the class-inheritance ":" to the new line.Daniel Jasper
This seems to be more common in LLVM, Google and Chromium. Before: class AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA : public BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB, public CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC { }; After: class AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA : public BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB, public CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC { }; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181183 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06Don't put a space before ellipsis.Daniel Jasper
Before: template <class ... Ts> void Foo(Ts ... ts) { Foo(ts ...); } After: template <class... Ts> void Foo(Ts... ts) { Foo(ts...); } git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181182 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06C++1y: support 'for', 'while', and 'do ... while' in constant expressions.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181181 91177308-0d34-0410-b5e6-96231b3b80d8