[libcxx] r324309 - Revert "[libc++] Fix PR35491 - std::array of zero-size doesn't work with non-default constructible types."
Author: niravd Date: Mon Feb 5 19:03:37 2018 New Revision: 324309 URL: http://llvm.org/viewvc/llvm-project?rev=324309&view=rev Log: Revert "[libc++] Fix PR35491 - std::array of zero-size doesn't work with non-default constructible types." Revert "Fix initialization of array with GCC." Revert "Make array non-CopyAssignable and make swap and fill ill-formed." This reverts commit r324182, r324185, and r324194 which were causing issues with zero-length std::arrays. Removed: libcxx/trunk/test/std/containers/sequences/array/array.cons/implicit_copy.pass.cpp libcxx/trunk/test/std/containers/sequences/array/array.fill/fill.fail.cpp libcxx/trunk/test/std/containers/sequences/array/array.swap/swap.fail.cpp Modified: libcxx/trunk/include/array libcxx/trunk/test/std/containers/sequences/array/array.cons/default.pass.cpp libcxx/trunk/test/std/containers/sequences/array/array.data/data.pass.cpp libcxx/trunk/test/std/containers/sequences/array/array.data/data_const.pass.cpp libcxx/trunk/test/std/containers/sequences/array/begin.pass.cpp Modified: libcxx/trunk/include/array URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/array?rev=324309&r1=324308&r2=324309&view=diff == --- libcxx/trunk/include/array (original) +++ libcxx/trunk/include/array Mon Feb 5 19:03:37 2018 @@ -118,57 +118,6 @@ template c _LIBCPP_BEGIN_NAMESPACE_STD template -struct __array_traits { - typedef _Tp _StorageT[_Size]; - - _LIBCPP_INLINE_VISIBILITY - static _LIBCPP_CONSTEXPR_AFTER_CXX14 typename remove_const<_Tp>::type* - __data(typename remove_const<_StorageT>::type& __store) { -return __store; - } - - _LIBCPP_INLINE_VISIBILITY - static _LIBCPP_CONSTEXPR_AFTER_CXX14 _Tp const* __data(const _StorageT& __store) { -return __store; - } - - _LIBCPP_INLINE_VISIBILITY - static void __swap(_StorageT& __lhs, _StorageT& __rhs) { -std::swap_ranges(__lhs, __lhs + _Size, __rhs); - } - - _LIBCPP_INLINE_VISIBILITY - static void __fill(_StorageT& __arr, _Tp const& __val) { -_VSTD::fill_n(__arr, _Size, __val); - } -}; - -template -struct __array_traits<_Tp, 0> { - typedef typename aligned_storage::value>::type - _NonConstStorageT[1]; - typedef typename conditional::value, const _NonConstStorageT, - _NonConstStorageT>::type _StorageT; - typedef typename remove_const<_Tp>::type _NonConstTp; - - _LIBCPP_INLINE_VISIBILITY - static _NonConstTp* __data(_NonConstStorageT &__store) { -return reinterpret_cast<_NonConstTp*>(__store); - } - - _LIBCPP_INLINE_VISIBILITY - static const _Tp* __data(const _StorageT &__store) { -return reinterpret_cast(__store); - } - - _LIBCPP_INLINE_VISIBILITY - static void __swap(_StorageT&, _StorageT&) {} - - _LIBCPP_INLINE_VISIBILITY - static void __fill(_StorageT&, _Tp const&) {} -}; - -template struct _LIBCPP_TEMPLATE_VIS array { // types: @@ -185,33 +134,31 @@ struct _LIBCPP_TEMPLATE_VIS array typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; -typedef __array_traits<_Tp, _Size> _Traits; -typename _Traits::_StorageT __elems_; +value_type __elems_[_Size > 0 ? _Size : 1]; // No explicit construct/copy/destroy for aggregate type -_LIBCPP_INLINE_VISIBILITY void fill(const value_type& __u) { - static_assert(_Size != 0 || !is_const<_Tp>::value, -"cannot fill zero-sized array of type 'const T'"); - _Traits::__fill(__elems_, __u); -} +_LIBCPP_INLINE_VISIBILITY void fill(const value_type& __u) +{_VSTD::fill_n(__elems_, _Size, __u);} +_LIBCPP_INLINE_VISIBILITY +void swap(array& __a) _NOEXCEPT_(_Size == 0 || __is_nothrow_swappable<_Tp>::value) +{ __swap_dispatch((std::integral_constant()), __a); } + +_LIBCPP_INLINE_VISIBILITY +void __swap_dispatch(std::true_type, array&) {} _LIBCPP_INLINE_VISIBILITY -void swap(array& __a) -_NOEXCEPT_(_Size == 0 || __is_nothrow_swappable<_Tp>::value) { - static_assert(_Size != 0 || !is_const<_Tp>::value, -"cannot swap zero-sized array of type 'const T'"); - _Traits::__swap(__elems_, __a.__elems_); -} +void __swap_dispatch(std::false_type, array& __a) +{ _VSTD::swap_ranges(__elems_, __elems_ + _Size, __a.__elems_);} // iterators: _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 -iterator begin() _NOEXCEPT {return iterator(data());} +iterator begin() _NOEXCEPT {return iterator(__elems_);} _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 -const_iterator begin() const _NOEXCEPT {return const_iterator(data());} +const_iterator begin() const _NOEXCEPT {return const_iterator(__elems_);} _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14 -iterator end() _NOEXCEPT {return iterator(data() + _Size);} +iterator end
r351559 - Clang side support for @cc assembly operands.
Author: niravd Date: Fri Jan 18 07:57:23 2019 New Revision: 351559 URL: http://llvm.org/viewvc/llvm-project?rev=351559&view=rev Log: Clang side support for @cc assembly operands. Modified: cfe/trunk/lib/Basic/Targets/X86.cpp Modified: cfe/trunk/lib/Basic/Targets/X86.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.cpp?rev=351559&r1=351558&r2=351559&view=diff == --- cfe/trunk/lib/Basic/Targets/X86.cpp (original) +++ cfe/trunk/lib/Basic/Targets/X86.cpp Fri Jan 18 07:57:23 2019 @@ -1554,6 +1554,42 @@ bool X86TargetInfo::validateCpuIs(String .Default(false); } + +static unsigned matchAsmCCConstraint(const char *&Name) { + auto RV = llvm::StringSwitch(Name) + .Case("@cca", 4) + .Case("@ccae", 5) + .Case("@ccb", 4) + .Case("@ccbe", 5) + .Case("@ccc", 4) + .Case("@cce", 4) + .Case("@ccz", 4) + .Case("@ccg", 4) + .Case("@ccge", 4) + .Case("@ccl", 4) + .Case("@ccle", 5) + .Case("@ccna", 5) + .Case("@ccnae",6) + .Case("@ccnb", 5) + .Case("@ccnbe",6) + .Case("@ccnc", 5) + .Case("@ccne", 5) + .Case("@ccnz", 5) + .Case("@ccng", 5) + .Case("@ccnge",6) + .Case("@ccnl", 5) + .Case("@ccnle",6) + .Case("@ccno", 5) + .Case("@ccnp", 5) + .Case("@ccns", 5) + .Case("@cco", 4) + .Case("@ccp", 4) + .Case("@ccs", 4) + .Default(0); + return RV; +} + + bool X86TargetInfo::validateAsmConstraint( const char *&Name, TargetInfo::ConstraintInfo &Info) const { switch (*Name) { @@ -1636,6 +1672,14 @@ bool X86TargetInfo::validateAsmConstrain case 'C': // SSE floating point constant. case 'G': // x87 floating point constant. return true; + case '@': +// CC condition changes. +if (auto Len = matchAsmCCConstraint(Name)) { + Name+=Len-1; + Info.setAllowsRegister(); + return true; +} +return false; } } @@ -1705,8 +1749,16 @@ bool X86TargetInfo::validateOperandSize( return true; } +//niravd std::string X86TargetInfo::convertConstraint(const char *&Constraint) const { switch (*Constraint) { +case '@': +if (auto Len = matchAsmCCConstraint(Constraint)) { + std::string Converted = "{" + std::string(Constraint, Len) + "}"; + Constraint+=Len-1; + return Converted; +} +break; case 'a': return std::string("{ax}"); case 'b': ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r351561 - Revert "Clang side support for @cc assembly operands."
Author: niravd Date: Fri Jan 18 08:03:08 2019 New Revision: 351561 URL: http://llvm.org/viewvc/llvm-project?rev=351561&view=rev Log: Revert "Clang side support for @cc assembly operands." Modified: cfe/trunk/lib/Basic/Targets/X86.cpp Modified: cfe/trunk/lib/Basic/Targets/X86.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.cpp?rev=351561&r1=351560&r2=351561&view=diff == --- cfe/trunk/lib/Basic/Targets/X86.cpp (original) +++ cfe/trunk/lib/Basic/Targets/X86.cpp Fri Jan 18 08:03:08 2019 @@ -1554,42 +1554,6 @@ bool X86TargetInfo::validateCpuIs(String .Default(false); } - -static unsigned matchAsmCCConstraint(const char *&Name) { - auto RV = llvm::StringSwitch(Name) - .Case("@cca", 4) - .Case("@ccae", 5) - .Case("@ccb", 4) - .Case("@ccbe", 5) - .Case("@ccc", 4) - .Case("@cce", 4) - .Case("@ccz", 4) - .Case("@ccg", 4) - .Case("@ccge", 4) - .Case("@ccl", 4) - .Case("@ccle", 5) - .Case("@ccna", 5) - .Case("@ccnae",6) - .Case("@ccnb", 5) - .Case("@ccnbe",6) - .Case("@ccnc", 5) - .Case("@ccne", 5) - .Case("@ccnz", 5) - .Case("@ccng", 5) - .Case("@ccnge",6) - .Case("@ccnl", 5) - .Case("@ccnle",6) - .Case("@ccno", 5) - .Case("@ccnp", 5) - .Case("@ccns", 5) - .Case("@cco", 4) - .Case("@ccp", 4) - .Case("@ccs", 4) - .Default(0); - return RV; -} - - bool X86TargetInfo::validateAsmConstraint( const char *&Name, TargetInfo::ConstraintInfo &Info) const { switch (*Name) { @@ -1672,14 +1636,6 @@ bool X86TargetInfo::validateAsmConstrain case 'C': // SSE floating point constant. case 'G': // x87 floating point constant. return true; - case '@': -// CC condition changes. -if (auto Len = matchAsmCCConstraint(Name)) { - Name+=Len-1; - Info.setAllowsRegister(); - return true; -} -return false; } } @@ -1749,16 +1705,8 @@ bool X86TargetInfo::validateOperandSize( return true; } -//niravd std::string X86TargetInfo::convertConstraint(const char *&Constraint) const { switch (*Constraint) { -case '@': -if (auto Len = matchAsmCCConstraint(Constraint)) { - std::string Converted = "{" + std::string(Constraint, Len) + "}"; - Constraint+=Len-1; - return Converted; -} -break; case 'a': return std::string("{ax}"); case 'b': ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r354053 - [X86] Add clang support for X86 flag output parameters.
Author: niravd Date: Thu Feb 14 11:27:25 2019 New Revision: 354053 URL: http://llvm.org/viewvc/llvm-project?rev=354053&view=rev Log: [X86] Add clang support for X86 flag output parameters. Summary: Add frontend support and expected flags for X86 inline assembly flag parameters. Reviewers: craig.topper, rnk, echristo Subscribers: eraman, nickdesaulniers, void, llvm-commits Differential Revision: https://reviews.llvm.org/D57394 Added: cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c cfe/trunk/test/Preprocessor/x86_asm_flag_output.c Modified: cfe/trunk/lib/Basic/Targets/X86.cpp cfe/trunk/test/Preprocessor/predefined-win-macros.c Modified: cfe/trunk/lib/Basic/Targets/X86.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.cpp?rev=354053&r1=354052&r2=354053&view=diff == --- cfe/trunk/lib/Basic/Targets/X86.cpp (original) +++ cfe/trunk/lib/Basic/Targets/X86.cpp Thu Feb 14 11:27:25 2019 @@ -864,6 +864,9 @@ bool X86TargetInfo::handleTargetFeatures /// definitions for this particular subtarget. void X86TargetInfo::getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const { + // Inline assembly supports X86 flag outputs. + Builder.defineMacro("__GCC_ASM_FLAG_OUTPUTS__"); + std::string CodeModel = getTargetOpts().CodeModel; if (CodeModel == "default") CodeModel = "small"; @@ -1553,6 +1556,40 @@ bool X86TargetInfo::validateCpuIs(String .Default(false); } +static unsigned matchAsmCCConstraint(const char *&Name) { + auto RV = llvm::StringSwitch(Name) +.Case("@cca", 4) +.Case("@ccae", 5) +.Case("@ccb", 4) +.Case("@ccbe", 5) +.Case("@ccc", 4) +.Case("@cce", 4) +.Case("@ccz", 4) +.Case("@ccg", 4) +.Case("@ccge", 5) +.Case("@ccl", 4) +.Case("@ccle", 5) +.Case("@ccna", 5) +.Case("@ccnae", 6) +.Case("@ccnb", 5) +.Case("@ccnbe", 6) +.Case("@ccnc", 5) +.Case("@ccne", 5) +.Case("@ccnz", 5) +.Case("@ccng", 5) +.Case("@ccnge", 6) +.Case("@ccnl", 5) +.Case("@ccnle", 6) +.Case("@ccno", 5) +.Case("@ccnp", 5) +.Case("@ccns", 5) +.Case("@cco", 4) +.Case("@ccp", 4) +.Case("@ccs", 4) +.Default(0); + return RV; +} + bool X86TargetInfo::validateAsmConstraint( const char *&Name, TargetInfo::ConstraintInfo &Info) const { switch (*Name) { @@ -1635,6 +1672,14 @@ bool X86TargetInfo::validateAsmConstrain case 'C': // SSE floating point constant. case 'G': // x87 floating point constant. return true; + case '@': +// CC condition changes. +if (auto Len = matchAsmCCConstraint(Name)) { + Name += Len - 1; + Info.setAllowsRegister(); + return true; +} +return false; } } @@ -1706,6 +1751,13 @@ bool X86TargetInfo::validateOperandSize( std::string X86TargetInfo::convertConstraint(const char *&Constraint) const { switch (*Constraint) { + case '@': +if (auto Len = matchAsmCCConstraint(Constraint)) { + std::string Converted = "{" + std::string(Constraint, Len) + "}"; + Constraint += Len - 1; + return Converted; +} +return std::string(1, *Constraint); case 'a': return std::string("{ax}"); case 'b': Added: cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c?rev=354053&view=auto == --- cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c (added) +++ cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c Thu Feb 14 11:27:25 2019 @@ -0,0 +1,365 @@ +// RUN: %clang_cc1 -O2 -emit-llvm %s -o - -triple x86_64-unknown-linux-gnu | FileCheck %s + +int test_cca(long nr, volatile long *addr) { + //CHECK-LABEL: @test_cca + //CHECK: = tail call i32 asm "cmp $2,$1", "={@cca},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) + int x; + asm("cmp %2,%1" + : "=@cca"(x), "=m"(*(volatile long *)(addr)) + : "r"(nr) + : "cc"); + if (x) +return 0; + return 1; +} + +int test_ccae(long nr, volatile long *addr) { + //CHECK-LABEL: @test_ccae + //CHECK: = tail call i32 asm "cmp $2,$1", "={@ccae},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) + int x; + asm("cmp %2,%1" + : "=@ccae"(x), "=m"(*(volatile long *)(addr)) + : "r"(nr) + : "cc"); + if (x) +return 0; + return 1; +} + +int test_ccb(long nr, volatile long *addr) { + //CHECK-LABEL: @test_ccb + //CHECK: = tail call i32 asm "cmp $2,$1
r354211 - [X86] Prevent clang clobber checking for asm flag constraints.
Author: niravd Date: Sat Feb 16 19:53:23 2019 New Revision: 354211 URL: http://llvm.org/viewvc/llvm-project?rev=354211&view=rev Log: [X86] Prevent clang clobber checking for asm flag constraints. Update getConstraintRegister as X86 Asm flag output constraints are no longer fully alphanumeric, Modified: cfe/trunk/lib/Basic/Targets/X86.h cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c Modified: cfe/trunk/lib/Basic/Targets/X86.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.h?rev=354211&r1=354210&r2=354211&view=diff == --- cfe/trunk/lib/Basic/Targets/X86.h (original) +++ cfe/trunk/lib/Basic/Targets/X86.h Sat Feb 16 19:53:23 2019 @@ -198,7 +198,7 @@ public: StringRef Expression) const override { StringRef::iterator I, E; for (I = Constraint.begin(), E = Constraint.end(); I != E; ++I) { - if (isalpha(*I)) + if (isalpha(*I) || *I == '@') break; } if (I == E) Modified: cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c?rev=354211&r1=354210&r2=354211&view=diff == --- cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c (original) +++ cfe/trunk/test/CodeGen/inline-asm-x86-flag-output.c Sat Feb 16 19:53:23 2019 @@ -363,3 +363,14 @@ int test_ccs(long nr, volatile long *add return 0; return 1; } + +_Bool check_no_clobber_conflicts() { + //CHECK-LABEL: @check_no_clobber_conflicts + //CHECK: = tail call i8 asm "", "={@cce},~{cx},~{dirflag},~{fpsr},~{flags}"() + _Bool b; + asm("" + : "=@cce"(b) + : + : "cx"); + return b; +} ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r331048 - [MC] Modify MCAsmStreamer to always build MCAssembler. NFCI.
Author: niravd Date: Fri Apr 27 08:45:54 2018 New Revision: 331048 URL: http://llvm.org/viewvc/llvm-project?rev=331048&view=rev Log: [MC] Modify MCAsmStreamer to always build MCAssembler. NFCI. Modified: cfe/trunk/tools/driver/cc1as_main.cpp Modified: cfe/trunk/tools/driver/cc1as_main.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=331048&r1=331047&r2=331048&view=diff == --- cfe/trunk/tools/driver/cc1as_main.cpp (original) +++ cfe/trunk/tools/driver/cc1as_main.cpp Fri Apr 27 08:45:54 2018 @@ -398,17 +398,19 @@ static bool ExecuteAssembler(AssemblerIn if (Opts.OutputType == AssemblerInvocation::FT_Asm) { MCInstPrinter *IP = TheTarget->createMCInstPrinter( llvm::Triple(Opts.Triple), Opts.OutputAsmVariant, *MAI, *MCII, *MRI); -MCCodeEmitter *CE = nullptr; -MCAsmBackend *MAB = nullptr; -if (Opts.ShowEncoding) { - CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); - MCTargetOptions Options; - MAB = TheTarget->createMCAsmBackend(*STI, *MRI, Options); -} + +std::unique_ptr CE; +if (Opts.ShowEncoding) + CE.reset(TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx)); +MCTargetOptions MCOptions; +std::unique_ptr MAB( +TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions)); + auto FOut = llvm::make_unique(*Out); Str.reset(TheTarget->createAsmStreamer( Ctx, std::move(FOut), /*asmverbose*/ true, -/*useDwarfDirectory*/ true, IP, CE, MAB, Opts.ShowInst)); +/*useDwarfDirectory*/ true, IP, std::move(CE), std::move(MAB), +Opts.ShowInst)); } else if (Opts.OutputType == AssemblerInvocation::FT_Null) { Str.reset(createNullStreamer(Ctx)); } else { @@ -419,13 +421,16 @@ static bool ExecuteAssembler(AssemblerIn Out = BOS.get(); } -MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx); -MCTargetOptions Options; -MCAsmBackend *MAB = TheTarget->createMCAsmBackend(*STI, *MRI, Options); +std::unique_ptr CE( +TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx)); +MCTargetOptions MCOptions; +std::unique_ptr MAB( +TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions)); + Triple T(Opts.Triple); Str.reset(TheTarget->createMCObjectStreamer( -T, Ctx, std::unique_ptr(MAB), *Out, std::unique_ptr(CE), *STI, -Opts.RelaxAll, Opts.IncrementalLinkerCompatible, +T, Ctx, std::move(MAB), *Out, std::move(CE), *STI, Opts.RelaxAll, +Opts.IncrementalLinkerCompatible, /*DWARFMustBeAtTheEnd*/ true)); Str.get()->InitSections(Opts.NoExecStack); } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r331052 - [MC] Provide default value for IsResolved.
Author: niravd Date: Fri Apr 27 09:11:24 2018 New Revision: 331052 URL: http://llvm.org/viewvc/llvm-project?rev=331052&view=rev Log: [MC] Provide default value for IsResolved. Modified: cfe/trunk/tools/driver/cc1as_main.cpp Modified: cfe/trunk/tools/driver/cc1as_main.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=331052&r1=331051&r2=331052&view=diff == --- cfe/trunk/tools/driver/cc1as_main.cpp (original) +++ cfe/trunk/tools/driver/cc1as_main.cpp Fri Apr 27 09:11:24 2018 @@ -435,6 +435,9 @@ static bool ExecuteAssembler(AssemblerIn Str.get()->InitSections(Opts.NoExecStack); } + // Use Assembler information for parsing. + Str->setUseAssemblerInfoForParsing(true); + bool Failed = false; std::unique_ptr Parser( ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r331055 - [MC] Undo spurious commit added into r331052.
Author: niravd Date: Fri Apr 27 09:16:06 2018 New Revision: 331055 URL: http://llvm.org/viewvc/llvm-project?rev=331055&view=rev Log: [MC] Undo spurious commit added into r331052. Modified: cfe/trunk/tools/driver/cc1as_main.cpp Modified: cfe/trunk/tools/driver/cc1as_main.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=331055&r1=331054&r2=331055&view=diff == --- cfe/trunk/tools/driver/cc1as_main.cpp (original) +++ cfe/trunk/tools/driver/cc1as_main.cpp Fri Apr 27 09:16:06 2018 @@ -435,9 +435,6 @@ static bool ExecuteAssembler(AssemblerIn Str.get()->InitSections(Opts.NoExecStack); } - // Use Assembler information for parsing. - Str->setUseAssemblerInfoForParsing(true); - bool Failed = false; std::unique_ptr Parser( ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r331218 - [MC] Change AsmParser to leverage Assembler during evaluation
Author: niravd Date: Mon Apr 30 12:22:40 2018 New Revision: 331218 URL: http://llvm.org/viewvc/llvm-project?rev=331218&view=rev Log: [MC] Change AsmParser to leverage Assembler during evaluation Teach AsmParser to check with Assembler for when evaluating constant expressions. This improves the handing of preprocessor expressions that must be resolved at parse time. This idiom can be found as assembling-time assertion checks in source-level assemblers. Note that this relies on the MCStreamer to keep sufficient tabs on Section / Fragment information which the MCAsmStreamer does not. As a result the textual output may fail where the equivalent object generation would pass. This can most easily be resolved by folding the MCAsmStreamer and MCObjectStreamer together which is planned for in a separate patch. Currently, this feature is only enabled for assembly input, keeping IR compilation consistent between assembly and object generation. Reviewers: echristo, rnk, probinson, espindola, peter.smith Reviewed By: peter.smith Subscribers: eraman, peter.smith, arichardson, jyknight, hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D45164 Added: cfe/trunk/test/CodeGen/asm-parser-info.S Modified: cfe/trunk/tools/driver/cc1as_main.cpp Added: cfe/trunk/test/CodeGen/asm-parser-info.S URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/asm-parser-info.S?rev=331218&view=auto == --- cfe/trunk/test/CodeGen/asm-parser-info.S (added) +++ cfe/trunk/test/CodeGen/asm-parser-info.S Mon Apr 30 12:22:40 2018 @@ -0,0 +1,12 @@ +// REQUIRES: x86-registered-target +// RUN: %clang --target=x86_64-unknown-linux-gnu -c %s -o /dev/null + +// Check that cc1as can use assembler info in object generation. +.data + +foo: +.if . - foo == 0 +.byte 0xaa +.else +.byte 0x00 +.endif Modified: cfe/trunk/tools/driver/cc1as_main.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1as_main.cpp?rev=331218&r1=331217&r2=331218&view=diff == --- cfe/trunk/tools/driver/cc1as_main.cpp (original) +++ cfe/trunk/tools/driver/cc1as_main.cpp Mon Apr 30 12:22:40 2018 @@ -435,6 +435,9 @@ static bool ExecuteAssembler(AssemblerIn Str.get()->InitSections(Opts.NoExecStack); } + // Assembly to object compilation should leverage assembly info. + Str->setUseAssemblerInfoForParsing(true); + bool Failed = false; std::unique_ptr Parser( ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r283583 - Silence Warning. NFC.
Author: niravd Date: Fri Oct 7 14:11:33 2016 New Revision: 283583 URL: http://llvm.org/viewvc/llvm-project?rev=283583&view=rev Log: Silence Warning. NFC. Modified: cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp?rev=283583&r1=283582&r2=283583&view=diff == --- cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Core/CoreEngine.cpp Fri Oct 7 14:11:33 2016 @@ -313,7 +313,7 @@ void CoreEngine::HandleBlockEdge(const B const ReturnStmt *RS = nullptr; if (!L.getSrc()->empty()) { if (Optional LastStmt = L.getSrc()->back().getAs()) { -if (RS = dyn_cast(LastStmt->getStmt())) { +if ((RS = dyn_cast(LastStmt->getStmt( { if (!RS->getRetValue()) RS = nullptr; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r318797 - Avoid unecessary opsize byte in segment move to memory
Author: niravd Date: Tue Nov 21 11:28:13 2017 New Revision: 318797 URL: http://llvm.org/viewvc/llvm-project?rev=318797&view=rev Log: Avoid unecessary opsize byte in segment move to memory Segment moves to memory are always 16-bit. Remove invalid 32 and 64 bit variants. Recommiting with missing clang inline assembly test change. Fixes PR34478. Reviewers: rnk, craig.topper Subscribers: llvm-commits, hiraditya Differential Revision: https://reviews.llvm.org/D39847 Modified: cfe/trunk/test/CodeGen/ms-inline-asm.c Modified: cfe/trunk/test/CodeGen/ms-inline-asm.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/ms-inline-asm.c?rev=318797&r1=318796&r2=318797&view=diff == --- cfe/trunk/test/CodeGen/ms-inline-asm.c (original) +++ cfe/trunk/test/CodeGen/ms-inline-asm.c Tue Nov 21 11:28:13 2017 @@ -577,17 +577,17 @@ void t40(float a) { void t41(unsigned short a) { // CHECK-LABEL: define void @t41(i16 zeroext %a) __asm mov cs, a; -// CHECK: mov cs, word ptr $0 +// CHECK: mov cs, $0 __asm mov ds, a; -// CHECK: mov ds, word ptr $1 +// CHECK: mov ds, $1 __asm mov es, a; -// CHECK: mov es, word ptr $2 +// CHECK: mov es, $2 __asm mov fs, a; -// CHECK: mov fs, word ptr $3 +// CHECK: mov fs, $3 __asm mov gs, a; -// CHECK: mov gs, word ptr $4 +// CHECK: mov gs, $4 __asm mov ss, a; -// CHECK: mov ss, word ptr $5 +// CHECK: mov ss, $5 // CHECK: "*m,*m,*m,*m,*m,*m,~{dirflag},~{fpsr},~{flags}"(i16* {{.*}}, i16* {{.*}}, i16* {{.*}}, i16* {{.*}}, i16* {{.*}}, i16* {{.*}}) } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r281753 - Introduce inline assembly parsing test is PR30372.
Author: niravd Date: Fri Sep 16 12:42:02 2016 New Revision: 281753 URL: http://llvm.org/viewvc/llvm-project?rev=281753&view=rev Log: Introduce inline assembly parsing test is PR30372. Added: cfe/trunk/test/Sema/pr30372.c Added: cfe/trunk/test/Sema/pr30372.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/pr30372.c?rev=281753&view=auto == --- cfe/trunk/test/Sema/pr30372.c (added) +++ cfe/trunk/test/Sema/pr30372.c Fri Sep 16 12:42:02 2016 @@ -0,0 +1,12 @@ +// REQUIRES: x86-registered-target +// RUN: %clang_cc1 %s -triple i386-pc-windows-msvc18.0.0 -disable-free -fms-volatile -fms-extensions -fms-compatibility -fms-compatibility-version=18 -std=c++11 -x c++ + +// Check that the parser catching an 'error' from forward declaration of "location" does not lexer out it's subsequent declation. + +void foo() { + __asm { +jl location + location: +ret + } +} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r298177 - [X86] Add NumRegisterParameters Module Flag.
Author: niravd Date: Fri Mar 17 19:43:39 2017 New Revision: 298177 URL: http://llvm.org/viewvc/llvm-project?rev=298177&view=rev Log: [X86] Add NumRegisterParameters Module Flag. Reviewers: rnk, mkuper Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D27051 Added: cfe/trunk/test/CodeGen/pr3997.c Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp cfe/trunk/test/Headers/altivec-header.c Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=298177&r1=298176&r2=298177&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Fri Mar 17 19:43:39 2017 @@ -159,6 +159,12 @@ CodeGenModule::CodeGenModule(ASTContext // CoverageMappingModuleGen object. if (CodeGenOpts.CoverageMapping) CoverageMapping.reset(new CoverageMappingModuleGen(*this, *CoverageInfo)); + + // Record mregparm value now so it is visible through rest of codegen. + if (Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86) +getModule().addModuleFlag(llvm::Module::Error, "NumRegisterParameters", + CodeGenOpts.NumRegisterParameters); + } CodeGenModule::~CodeGenModule() {} @@ -416,6 +422,7 @@ void CodeGenModule::Release() { (Context.getLangOpts().Modules || !LinkerOptionsMetadata.empty())) { EmitModuleLinkOptions(); } + if (CodeGenOpts.DwarfVersion) { // We actually want the latest version when there are conflicts. // We can change from Warning to Latest if such mode is supported. Added: cfe/trunk/test/CodeGen/pr3997.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/pr3997.c?rev=298177&view=auto == --- cfe/trunk/test/CodeGen/pr3997.c (added) +++ cfe/trunk/test/CodeGen/pr3997.c Fri Mar 17 19:43:39 2017 @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 %s -triple i386-unknown-linux-gnu -mregparm 3 -emit-llvm -o - | FileCheck %s + +void *memcpy(void *dest, const void *src, unsigned int n); + +void use_builtin_memcpy(void *dest, const void *src, unsigned int n) { + __builtin_memcpy(dest, src, n); +} + +void use_memcpy(void *dest, const void *src, unsigned int n) { + memcpy(dest, src, n); +} + +//CHECK: !{i32 1, !"NumRegisterParameters", i32 3} Modified: cfe/trunk/test/Headers/altivec-header.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/altivec-header.c?rev=298177&r1=298176&r2=298177&view=diff == --- cfe/trunk/test/Headers/altivec-header.c (original) +++ cfe/trunk/test/Headers/altivec-header.c Fri Mar 17 19:43:39 2017 @@ -9,4 +9,4 @@ // CHECK: target triple = "powerpc64- // CHECK-NEXT: {{^$}} -// CHECK-NEXT: llvm.ident +// CHECK-NEXT: {{llvm\..*}} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r299079 - Move NumRegParameters Module Flag. NFCI.
Author: niravd Date: Thu Mar 30 08:41:44 2017 New Revision: 299079 URL: http://llvm.org/viewvc/llvm-project?rev=299079&view=rev Log: Move NumRegParameters Module Flag. NFCI. Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=299079&r1=299078&r2=299079&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Thu Mar 30 08:41:44 2017 @@ -159,12 +159,6 @@ CodeGenModule::CodeGenModule(ASTContext // CoverageMappingModuleGen object. if (CodeGenOpts.CoverageMapping) CoverageMapping.reset(new CoverageMappingModuleGen(*this, *CoverageInfo)); - - // Record mregparm value now so it is visible through rest of codegen. - if (Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86) -getModule().addModuleFlag(llvm::Module::Error, "NumRegisterParameters", - CodeGenOpts.NumRegisterParameters); - } CodeGenModule::~CodeGenModule() {} @@ -424,6 +418,11 @@ void CodeGenModule::Release() { EmitModuleLinkOptions(); } + // Record mregparm value now so it is visible through rest of codegen. + if (Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86) +getModule().addModuleFlag(llvm::Module::Error, "NumRegisterParameters", + CodeGenOpts.NumRegisterParameters); + if (CodeGenOpts.DwarfVersion) { // We actually want the latest version when there are conflicts. // We can change from Warning to Latest if such mode is supported. ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] r300324 - Silence -Wlogical-op-parentheses warning NFC
Author: niravd Date: Fri Apr 14 09:36:45 2017 New Revision: 300324 URL: http://llvm.org/viewvc/llvm-project?rev=300324&view=rev Log: Silence -Wlogical-op-parentheses warning NFC Modified: clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp Modified: clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp?rev=300324&r1=300323&r2=300324&view=diff == --- clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/misc/ForwardingReferenceOverloadCheck.cpp Fri Apr 14 09:36:45 2017 @@ -123,7 +123,7 @@ void ForwardingReferenceOverloadCheck::c (OtherCtor->isCopyConstructor() ? EnabledCopy : EnabledMove) = true; } } - bool Copy = !EnabledMove && !DisabledMove && !DisabledCopy || EnabledCopy; + bool Copy = (!EnabledMove && !DisabledMove && !DisabledCopy) || EnabledCopy; bool Move = !DisabledMove || EnabledMove; if (!Copy && !Move) return; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r293649 - [X86] Teach Clang about -mfentry flag
Author: niravd Date: Tue Jan 31 11:00:35 2017 New Revision: 293649 URL: http://llvm.org/viewvc/llvm-project?rev=293649&view=rev Log: [X86] Teach Clang about -mfentry flag Replace mcount calls with calls to fentry. Reviewers: hfinkel, craig.topper Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D28001 Added: cfe/trunk/test/CodeGen/fentry.c Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/include/clang/Frontend/CodeGenOptions.def cfe/trunk/lib/CodeGen/CodeGenFunction.cpp cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=293649&r1=293648&r2=293649&view=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Tue Jan 31 11:00:35 2017 @@ -1858,6 +1858,8 @@ def mpie_copy_relocations : Flag<["-"], Flags<[CC1Option]>, HelpText<"Use copy relocations support for PIE builds">; def mno_pie_copy_relocations : Flag<["-"], "mno-pie-copy-relocations">, Group; +def mfentry : Flag<["-"], "mfentry">, HelpText<"insert calls to fentry at function entry (x86 only)">, + Flags<[CC1Option]>, Group; def mx87 : Flag<["-"], "mx87">, Group; def m80387 : Flag<["-"], "m80387">, Alias; def msse2 : Flag<["-"], "msse2">, Group; Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=293649&r1=293648&r2=293649&view=diff == --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original) +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Tue Jan 31 11:00:35 2017 @@ -83,6 +83,7 @@ CODEGENOPT(XRayInstrumentFunctions , 1, VALUE_CODEGENOPT(XRayInstructionThreshold , 32, 200) CODEGENOPT(InstrumentForProfiling , 1, 0) ///< Set when -pg is enabled. +CODEGENOPT(CallFEntry , 1, 0) ///< Set when -mfentry is enabled. CODEGENOPT(LessPreciseFPMAD , 1, 0) ///< Enable less precise MAD instructions to ///< be generated. CODEGENOPT(PrepareForLTO , 1, 0) ///< Set when -flto is enabled on the Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=293649&r1=293648&r2=293649&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Tue Jan 31 11:00:35 2017 @@ -860,8 +860,12 @@ void CodeGenFunction::StartFunction(Glob // inlining, we just add an attribute to insert a mcount call in backend. // The attribute "counting-function" is set to mcount function name which is // architecture dependent. - if (CGM.getCodeGenOpts().InstrumentForProfiling) -Fn->addFnAttr("counting-function", getTarget().getMCountName()); + if (CGM.getCodeGenOpts().InstrumentForProfiling) { +if (CGM.getCodeGenOpts().CallFEntry) + Fn->addFnAttr("fentry-call", "true"); +else + Fn->addFnAttr("counting-function", getTarget().getMCountName()); + } if (RetTy->isVoidType()) { // Void type; nothing to return. Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=293649&r1=293648&r2=293649&view=diff == --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Tue Jan 31 11:00:35 2017 @@ -5483,6 +5483,9 @@ void Clang::ConstructJob(Compilation &C, if (getToolChain().SupportsProfiling()) Args.AddLastArg(CmdArgs, options::OPT_pg); + if (getToolChain().SupportsProfiling()) +Args.AddLastArg(CmdArgs, options::OPT_mfentry); + // -flax-vector-conversions is default. if (!Args.hasFlag(options::OPT_flax_vector_conversions, options::OPT_fno_lax_vector_conversions)) Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=293649&r1=293648&r2=293649&view=diff == --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Jan 31 11:00:35 2017 @@ -717,6 +717,7 @@ static bool ParseCodeGenArgs(CodeGenOpti Opts.XRayInstructionThreshold = getLastArgIntValue(Args, OPT_fxray_instruction_threshold_, 200, Diags); Opts.InstrumentForProfiling = Args.hasArg(OPT_pg); + Opts.CallFEntry = Args.hasArg(OPT_mfentry); Opts.EmitOpenCLArgMetadata = Args.hasArg(OPT_cl_kernel_arg_info); Opts.CompressDebugSections = Args.hasArg(OPT_comp
r276896 - Update Clang Parser test error message to match new parser errors
Author: niravd Date: Wed Jul 27 12:39:47 2016 New Revision: 276896 URL: http://llvm.org/viewvc/llvm-project?rev=276896&view=rev Log: Update Clang Parser test error message to match new parser errors Modified: cfe/trunk/test/Parser/ms-inline-asm.c Modified: cfe/trunk/test/Parser/ms-inline-asm.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/ms-inline-asm.c?rev=276896&r1=276895&r2=276896&view=diff == --- cfe/trunk/test/Parser/ms-inline-asm.c (original) +++ cfe/trunk/test/Parser/ms-inline-asm.c Wed Jul 27 12:39:47 2016 @@ -54,7 +54,7 @@ void t12() { __asm jmp label // expected-error {{use of undeclared label 'label'}} } void t13() { - __asm m{o}v eax, ebx // expected-error {{expected identifier}} expected-error {{use of undeclared label '{o}v eax, ebx'}} + __asm m{o}v eax, ebx // expected-error {{unknown token in expression}} } int t_fail() { // expected-note {{to match this}} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r276907 - Add flags to toggle preservation of assembly comments
Author: niravd Date: Wed Jul 27 14:57:40 2016 New Revision: 276907 URL: http://llvm.org/viewvc/llvm-project?rev=276907&view=rev Log: Add flags to toggle preservation of assembly comments Summary: Add -fpreserve-as-comments and -fno-preserve-as-comments. Reviewers: echristo, rnk Subscribers: mehdi_amini, llvm-commits Differential Revision: https://reviews.llvm.org/D22883 Added: cfe/trunk/test/CodeGen/preserve-as-comments.c Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/include/clang/Frontend/CodeGenOptions.def cfe/trunk/lib/CodeGen/BackendUtil.cpp cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=276907&r1=276906&r2=276907&view=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Wed Jul 27 14:57:40 2016 @@ -1089,6 +1089,9 @@ def fpie : Flag<["-"], "fpie">, Group, Group; def fplugin_EQ : Joined<["-"], "fplugin=">, Group, Flags<[DriverOption]>, MetaVarName<"">, HelpText<"Load the named plugin (dynamic shared object)">; +def fpreserve_as_comments : Flag<["-"], "fpreserve-as-comments">, Group; +def fno_preserve_as_comments : Flag<["-"], "fno-preserve-as-comments">, Group, Flags<[CC1Option]>, + HelpText<"Do not preserve comments in inline assembly">; def fprofile_arcs : Flag<["-"], "fprofile-arcs">, Group; def fno_profile_arcs : Flag<["-"], "fno-profile-arcs">, Group; def framework : Separate<["-"], "framework">, Flags<[LinkerInput]>; Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=276907&r1=276906&r2=276907&view=diff == --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original) +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Wed Jul 27 14:57:40 2016 @@ -32,6 +32,7 @@ CODEGENOPT(DisableIntegratedAS, 1, 0) // CODEGENOPT(CompressDebugSections, 1, 0) ///< -Wa,-compress-debug-sections CODEGENOPT(RelaxELFRelocations, 1, 0) ///< -Wa,--mrelax-relocations CODEGENOPT(AsmVerbose, 1, 0) ///< -dA, -fverbose-asm. +CODEGENOPT(PreserveAsmComments, 1, 1) ///< -dA, -fno-preserve-as-comments. CODEGENOPT(AssumeSaneOperatorNew , 1, 1) ///< implicit __attribute__((malloc)) operator new CODEGENOPT(Autolink , 1, 1) ///< -fno-autolink CODEGENOPT(ObjCAutoRefCountExceptions , 1, 0) ///< Whether ARC should be EH-safe. Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=276907&r1=276906&r2=276907&view=diff == --- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original) +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Wed Jul 27 14:57:40 2016 @@ -604,6 +604,7 @@ void EmitAssemblyHelper::CreateTargetMac CodeGenOpts.IncrementalLinkerCompatible; Options.MCOptions.MCFatalWarnings = CodeGenOpts.FatalWarnings; Options.MCOptions.AsmVerbose = CodeGenOpts.AsmVerbose; + Options.MCOptions.PreserveAsmComments = CodeGenOpts.PreserveAsmComments; Options.MCOptions.ABIName = TargetOpts.ABI; TM.reset(TheTarget->createTargetMachine(Triple, TargetOpts.CPU, FeaturesStr, Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=276907&r1=276906&r2=276907&view=diff == --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Wed Jul 27 14:57:40 2016 @@ -4193,6 +4193,10 @@ void Clang::ConstructJob(Compilation &C, true)) CmdArgs.push_back("-fno-jump-tables"); + if (!Args.hasFlag(options::OPT_fpreserve_as_comments, +options::OPT_fno_preserve_as_comments, true)) +CmdArgs.push_back("-fno-preserve-as-comments"); + if (Arg *A = Args.getLastArg(options::OPT_mregparm_EQ)) { CmdArgs.push_back("-mregparm"); CmdArgs.push_back(A->getValue()); Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=276907&r1=276906&r2=276907&view=diff == --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Wed Jul 27 14:57:40 2016 @@ -544,6 +544,7 @@ static bool ParseCodeGenArgs(CodeGenOpti Args.hasFlag(OPT_fcoverage_mapping, OPT_fno_coverage_mapping, false); Opts.DumpCoverageMapping = Args.hasArg(OPT_dump_coverage_mapping); Opts.AsmVerbose = Args.hasArg(OPT_masm_verbose); + Opts.PreserveAsmComme
r276915 - Add target triple in test
Author: niravd Date: Wed Jul 27 15:48:39 2016 New Revision: 276915 URL: http://llvm.org/viewvc/llvm-project?rev=276915&view=rev Log: Add target triple in test Modified: cfe/trunk/test/CodeGen/preserve-as-comments.c Modified: cfe/trunk/test/CodeGen/preserve-as-comments.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/preserve-as-comments.c?rev=276915&r1=276914&r2=276915&view=diff == --- cfe/trunk/test/CodeGen/preserve-as-comments.c (original) +++ cfe/trunk/test/CodeGen/preserve-as-comments.c Wed Jul 27 15:48:39 2016 @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -S -fno-preserve-as-comments %s -o - | FileCheck %s --check-prefix=NOASM --check-prefix=CHECK -// RUN: %clang_cc1 -S %s -o - | FileCheck %s --check-prefix=ASM --check-prefix=CHECK +// RUN: %clang_cc1 -S -triple=x86_64-unknown-unknown -fno-preserve-as-comments %s -o - | FileCheck %s --check-prefix=NOASM --check-prefix=CHECK +// RUN: %clang_cc1 -S %s -triple=x86_64-unknown-unknown -o - | FileCheck %s --check-prefix=ASM --check-prefix=CHECK // CHECK-LABEL: main // CHECK: #APP ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r276947 - Replace preserve-as-comments CodeGen test with driver test
Author: niravd Date: Wed Jul 27 19:36:34 2016 New Revision: 276947 URL: http://llvm.org/viewvc/llvm-project?rev=276947&view=rev Log: Replace preserve-as-comments CodeGen test with driver test Added: cfe/trunk/test/Driver/preserve-as-comments.c Removed: cfe/trunk/test/CodeGen/preserve-as-comments.c Removed: cfe/trunk/test/CodeGen/preserve-as-comments.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/preserve-as-comments.c?rev=276946&view=auto == --- cfe/trunk/test/CodeGen/preserve-as-comments.c (original) +++ cfe/trunk/test/CodeGen/preserve-as-comments.c (removed) @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -S -triple=x86_64-unknown-unknown -fno-preserve-as-comments %s -o - | FileCheck %s --check-prefix=NOASM --check-prefix=CHECK -// RUN: %clang_cc1 -S %s -triple=x86_64-unknown-unknown -o - | FileCheck %s --check-prefix=ASM --check-prefix=CHECK - -// CHECK-LABEL: main -// CHECK: #APP -// ASM: #comment -// NOASM-NOT: #comment -// CHECK: #NO_APP -int main() { - __asm__("/*comment*/"); - return 0; -} Added: cfe/trunk/test/Driver/preserve-as-comments.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/preserve-as-comments.c?rev=276947&view=auto == --- cfe/trunk/test/Driver/preserve-as-comments.c (added) +++ cfe/trunk/test/Driver/preserve-as-comments.c Wed Jul 27 19:36:34 2016 @@ -0,0 +1,2 @@ +// RUN: %clang -S -fno-preserve-as-comments %s -### 2>&1 | FileCheck %s +// CHECK: "-fno-preserve-as-comments" ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r277490 - Update Clang Parser test error message to match new parser errors
Author: niravd Date: Tue Aug 2 12:58:14 2016 New Revision: 277490 URL: http://llvm.org/viewvc/llvm-project?rev=277490&view=rev Log: Update Clang Parser test error message to match new parser errors Update clang tests in light of r277489. Modified: cfe/trunk/test/Parser/ms-inline-asm.c Modified: cfe/trunk/test/Parser/ms-inline-asm.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/ms-inline-asm.c?rev=277490&r1=277489&r2=277490&view=diff == --- cfe/trunk/test/Parser/ms-inline-asm.c (original) +++ cfe/trunk/test/Parser/ms-inline-asm.c Tue Aug 2 12:58:14 2016 @@ -54,7 +54,7 @@ void t12() { __asm jmp label // expected-error {{use of undeclared label 'label'}} } void t13() { - __asm m{o}v eax, ebx // expected-error {{expected identifier}} expected-error {{use of undeclared label '{o}v eax, ebx'}} + __asm m{o}v eax, ebx // expected-error {{unknown token in expression}} } int t_fail() { // expected-note {{to match this}} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r261533 - Add support for Android Vector calling convention for AArch64
Author: niravd Date: Mon Feb 22 10:48:42 2016 New Revision: 261533 URL: http://llvm.org/viewvc/llvm-project?rev=261533&view=rev Log: Add support for Android Vector calling convention for AArch64 This modification applies the following Android commit when we have an Android environment. This is the sole non-renderscript in the Android repo commit 9212d4fb30a3ca2f4ee966dd2748c35573d9682c Author: Tim Murray Date: Fri Aug 15 16:00:15 2014 -0700 Update vector calling convention for AArch64. bug 16846318 Change-Id: I3cfd167758b4bd634d8480ee6ba6bb55d61f82a7 Reviewers: srhines, jyknight Subscribers: mcrosier, aemerson, rengolin, tberghammer, danalbert, srhines Differential Revision: http://reviews.llvm.org/D17448 Modified: cfe/trunk/lib/CodeGen/ABIInfo.h cfe/trunk/lib/CodeGen/TargetInfo.cpp cfe/trunk/test/CodeGen/arm64-abi-vector.c Modified: cfe/trunk/lib/CodeGen/ABIInfo.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ABIInfo.h?rev=261533&r1=261532&r2=261533&view=diff == --- cfe/trunk/lib/CodeGen/ABIInfo.h (original) +++ cfe/trunk/lib/CodeGen/ABIInfo.h Mon Feb 22 10:48:42 2016 @@ -85,6 +85,8 @@ namespace clang { CodeGen::Address VAListAddr, QualType Ty) const = 0; +bool isAndroid() const; + /// Emit the target dependent code to load a value of /// \arg Ty from the \c __builtin_ms_va_list pointed to by \arg VAListAddr. virtual CodeGen::Address EmitMSVAArg(CodeGen::CodeGenFunction &CGF, Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=261533&r1=261532&r2=261533&view=diff == --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Mon Feb 22 10:48:42 2016 @@ -117,6 +117,8 @@ const TargetInfo &ABIInfo::getTarget() c return CGT.getTarget(); } +bool ABIInfo:: isAndroid() const { return getTarget().getTriple().isAndroid(); } + bool ABIInfo::isHomogeneousAggregateBaseType(QualType Ty) const { return false; } @@ -4319,6 +4321,11 @@ ABIArgInfo AArch64ABIInfo::classifyArgum // Handle illegal vector types here. if (isIllegalVectorType(Ty)) { uint64_t Size = getContext().getTypeSize(Ty); +// Android promotes <2 x i8> to i16, not i32 +if(isAndroid() && (Size <= 16)) { + llvm::Type *ResType = llvm::Type::getInt16Ty(getVMContext()); + return ABIArgInfo::getDirect(ResType); +} if (Size <= 32) { llvm::Type *ResType = llvm::Type::getInt32Ty(getVMContext()); return ABIArgInfo::getDirect(ResType); @@ -4803,11 +4810,6 @@ public: } } - bool isAndroid() const { -return (getTarget().getTriple().getEnvironment() == -llvm::Triple::Android); - } - ABIKind getABIKind() const { return Kind; } private: Modified: cfe/trunk/test/CodeGen/arm64-abi-vector.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm64-abi-vector.c?rev=261533&r1=261532&r2=261533&view=diff == --- cfe/trunk/test/CodeGen/arm64-abi-vector.c (original) +++ cfe/trunk/test/CodeGen/arm64-abi-vector.c Mon Feb 22 10:48:42 2016 @@ -1,7 +1,9 @@ // RUN: %clang_cc1 -triple arm64-apple-ios7 -target-abi darwinpcs -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple aarch64-linux-android -emit-llvm -o - %s | FileCheck -check-prefix=ANDROID %s #include +typedef __attribute__(( ext_vector_type(2) )) char __char2; typedef __attribute__(( ext_vector_type(3) )) char __char3; typedef __attribute__(( ext_vector_type(4) )) char __char4; typedef __attribute__(( ext_vector_type(5) )) char __char5; @@ -13,6 +15,26 @@ typedef __attribute__(( ext_vector_type( typedef __attribute__(( ext_vector_type(5) )) int __int5; typedef __attribute__(( ext_vector_type(3) )) double __double3; +// Passing legal vector types as varargs. Check that we've allocated the appropriate size +double varargs_vec_2c(int fixed, ...) { +// ANDROID: varargs_vec_2c +// ANDROID: [[VAR:%.*]] = alloca <2 x i8>, align 2 +// ANDROID: [[AP_NEXT:%.*]] = getelementptr inbounds i8, i8* [[AP_CUR:%.*]], i64 8 +// ANDROID: bitcast i8* [[AP_CUR]] to <2 x i8>* + va_list ap; + double sum = fixed; + va_start(ap, fixed); + __char2 c3 = va_arg(ap, __char2); + sum = sum + c3.x + c3.y; + va_end(ap); + return sum; +} + +double test_2c(__char2 *in) { +// ANDROID: call double (i32, ...) @varargs_vec_2c(i32 3, i16 {{%.*}}) + return varargs_vec_2c(3, *in); +} + double varargs_vec_3c(int fixed, ...) { // CHECK: varargs_vec_3c // CHECK: alloca <3 x i8>, align 4 ___ cfe-commits mailing list cfe-commits@lists.llvm.org
r265425 - Add -fno-jump-tables and-fjump-tables flags
Author: niravd Date: Tue Apr 5 12:50:43 2016 New Revision: 265425 URL: http://llvm.org/viewvc/llvm-project?rev=265425&view=rev Log: Add -fno-jump-tables and-fjump-tables flags Add no-jump-tables flag to disable use of jump tables when lowering switch statements Reviewers: echristo, hans Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D18407 Added: cfe/trunk/test/CodeGen/nousejumptable.c Modified: cfe/trunk/include/clang/Driver/Options.td cfe/trunk/include/clang/Frontend/CodeGenOptions.def cfe/trunk/lib/CodeGen/CodeGenFunction.cpp cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=265425&r1=265424&r2=265425&view=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Tue Apr 5 12:50:43 2016 @@ -586,6 +586,9 @@ def fno_math_errno : Flag<["-"], "fno-ma def fbracket_depth_EQ : Joined<["-"], "fbracket-depth=">, Group; def fsignaling_math : Flag<["-"], "fsignaling-math">, Group; def fno_signaling_math : Flag<["-"], "fno-signaling-math">, Group; +def fjump_tables : Flag<["-"], "fjump-tables">, Group; +def fno_jump_tables : Flag<["-"], "fno-jump-tables">, Group, Flags<[CC1Option]>, + HelpText<"Do not use jump tables for lowering switches">; def fsanitize_EQ : CommaJoined<["-"], "fsanitize=">, Group, Flags<[CC1Option, CoreOption]>, MetaVarName<"">, HelpText<"Turn on runtime checks for various forms of undefined " Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=265425&r1=265424&r2=265425&view=diff == --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original) +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Tue Apr 5 12:50:43 2016 @@ -149,6 +149,7 @@ CODEGENOPT(UnitAtATime , 1, 1) /// ///< selection. CODEGENOPT(UnrollLoops , 1, 0) ///< Control whether loops are unrolled. CODEGENOPT(RerollLoops , 1, 0) ///< Control whether loops are rerolled. +CODEGENOPT(NoUseJumpTables , 1, 0) ///< Set when -fno-jump-tables is enabled CODEGENOPT(UnsafeFPMath , 1, 0) ///< Allow unsafe floating point optzns. CODEGENOPT(UnwindTables , 1, 0) ///< Emit unwind tables. CODEGENOPT(VectorizeBB , 1, 0) ///< Run basic block vectorizer. Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=265425&r1=265424&r2=265425&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Tue Apr 5 12:50:43 2016 @@ -711,6 +711,10 @@ void CodeGenFunction::StartFunction(Glob Fn->addFnAttr(llvm::Attribute::NoInline); } + // Add no-jump-tables value. + Fn->addFnAttr("no-jump-tables", +llvm::toStringRef(CGM.getCodeGenOpts().NoUseJumpTables)); + if (getLangOpts().OpenCL) { // Add metadata for a kernel function. if (const FunctionDecl *FD = dyn_cast_or_null(D)) Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=265425&r1=265424&r2=265425&view=diff == --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Tue Apr 5 12:50:43 2016 @@ -3891,6 +3891,10 @@ void Clang::ConstructJob(Compilation &C, A->claim(); } + if (!Args.hasFlag(options::OPT_fjump_tables, options::OPT_fno_jump_tables, +true)) +CmdArgs.push_back("-fno-jump-tables"); + if (Arg *A = Args.getLastArg(options::OPT_mregparm_EQ)) { CmdArgs.push_back("-mregparm"); CmdArgs.push_back(A->getValue()); Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=265425&r1=265424&r2=265425&view=diff == --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Apr 5 12:50:43 2016 @@ -606,6 +606,8 @@ static bool ParseCodeGenArgs(CodeGenOpti Opts.MergeFunctions = Args.hasArg(OPT_fmerge_functions); + Opts.NoUseJumpTables = Args.hasArg(OPT_fno_jump_tables); + Opts.PrepareForLTO = Args.hasArg(OPT_flto, OPT_flto_EQ); const Arg *A = Args.getLastArg(OPT_flto, OPT_flto_EQ); Opts.EmitSummaryIndex = A && A->containsValue("thin"); Added: cfe/trunk/tes
r265432 - Fix missing period in no-jump-table flag comment. NFC.
Author: niravd Date: Tue Apr 5 13:11:01 2016 New Revision: 265432 URL: http://llvm.org/viewvc/llvm-project?rev=265432&view=rev Log: Fix missing period in no-jump-table flag comment. NFC. Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=265432&r1=265431&r2=265432&view=diff == --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original) +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Tue Apr 5 13:11:01 2016 @@ -149,7 +149,7 @@ CODEGENOPT(UnitAtATime , 1, 1) /// ///< selection. CODEGENOPT(UnrollLoops , 1, 0) ///< Control whether loops are unrolled. CODEGENOPT(RerollLoops , 1, 0) ///< Control whether loops are rerolled. -CODEGENOPT(NoUseJumpTables , 1, 0) ///< Set when -fno-jump-tables is enabled +CODEGENOPT(NoUseJumpTables , 1, 0) ///< Set when -fno-jump-tables is enabled. CODEGENOPT(UnsafeFPMath , 1, 0) ///< Allow unsafe floating point optzns. CODEGENOPT(UnwindTables , 1, 0) ///< Emit unwind tables. CODEGENOPT(VectorizeBB , 1, 0) ///< Run basic block vectorizer. ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r265439 - Fix broken tests from no-jump-table commit
Author: niravd Date: Tue Apr 5 13:59:37 2016 New Revision: 265439 URL: http://llvm.org/viewvc/llvm-project?rev=265439&view=rev Log: Fix broken tests from no-jump-table commit Summary: Fix failing tests from no-jump-table flag addition Reviewers: jyknight Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D18801 Modified: cfe/trunk/test/CodeGen/cfi-check-fail.c cfe/trunk/test/CodeGen/cfi-check-fail2.c cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp cfe/trunk/test/CodeGenCXX/dllexport.cpp cfe/trunk/test/CodeGenObjCXX/personality-abuse.mm Modified: cfe/trunk/test/CodeGen/cfi-check-fail.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/cfi-check-fail.c?rev=265439&r1=265438&r2=265439&view=diff == --- cfe/trunk/test/CodeGen/cfi-check-fail.c (original) +++ cfe/trunk/test/CodeGen/cfi-check-fail.c Tue Apr 5 13:59:37 2016 @@ -7,7 +7,7 @@ void caller(void (*f)()) { f(); } -// CHECK: define weak_odr hidden void @__cfi_check_fail(i8*, i8*) { +// CHECK: define weak_odr hidden void @__cfi_check_fail(i8*, i8*) // CHECK: store i8* %0, i8** %[[ALLOCA0:.*]], align 8 // CHECK: store i8* %1, i8** %[[ALLOCA1:.*]], align 8 // CHECK: %[[DATA:.*]] = load i8*, i8** %[[ALLOCA0]], align 8 Modified: cfe/trunk/test/CodeGen/cfi-check-fail2.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/cfi-check-fail2.c?rev=265439&r1=265438&r2=265439&view=diff == --- cfe/trunk/test/CodeGen/cfi-check-fail2.c (original) +++ cfe/trunk/test/CodeGen/cfi-check-fail2.c Tue Apr 5 13:59:37 2016 @@ -7,7 +7,7 @@ void caller(void (*f)()) { f(); } -// CHECK: define weak_odr hidden void @__cfi_check_fail(i8*, i8*) { +// CHECK: define weak_odr hidden void @__cfi_check_fail(i8*, i8*) // CHECK: store i8* %0, i8** %[[ALLOCA0:.*]], align 8 // CHECK: store i8* %1, i8** %[[ALLOCA1:.*]], align 8 // CHECK: %[[DATA:.*]] = load i8*, i8** %[[ALLOCA0]], align 8 Modified: cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp?rev=265439&r1=265438&r2=265439&view=diff == --- cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp (original) +++ cfe/trunk/test/CodeGenCXX/2009-05-04-PureConstNounwind.cpp Tue Apr 5 13:59:37 2016 @@ -12,10 +12,11 @@ int f(void) { // CHECK: declare i32 @_Z1cv() [[NUW_RN:#[0-9]+]] // CHECK: declare i32 @_Z1pv() [[NUW_RO:#[0-9]+]] -// CHECK: declare i32 @_Z1tv() [[TF]] +// CHECK: declare i32 @_Z1tv() [[TF2:#[0-9]+]] // CHECK: attributes [[TF]] = { {{.*}} } // CHECK: attributes [[NUW_RN]] = { nounwind readnone{{.*}} } // CHECK: attributes [[NUW_RO]] = { nounwind readonly{{.*}} } +// CHECK: attributes [[TF2]] = { {{.*}} } // CHECK: attributes [[NUW_RN_CALL]] = { nounwind readnone } // CHECK: attributes [[NUW_RO_CALL]] = { nounwind readonly } Modified: cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp?rev=265439&r1=265438&r2=265439&view=diff == --- cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp (original) +++ cfe/trunk/test/CodeGenCXX/cxx11-exception-spec.cpp Tue Apr 5 13:59:37 2016 @@ -70,37 +70,37 @@ void h() { // CHECK: define {{.*}} @_Z1iv void i() { - // CHECK: declare {{.*}} @_Z1gIiEvv() [[NUW]] + // CHECK: declare {{.*}} @_Z1gIiEvv() [[NUW2:#[0-9]+]] g(); // CHECK: declare {{.*}} @_Z1gIA2_iEvv() // CHECK-NOT: [[NUW]] g(); - // CHECK: declare {{.*}} @_ZN1SIiE1gEv() [[NUW]] + // CHECK: declare {{.*}} @_ZN1SIiE1gEv() [[NUW2]] S::g(); // CHECK: declare {{.*}} @_ZN1SIA2_iE1gEv() // CHECK-NOT: [[NUW]] S::g(); - // CHECK: declare {{.*}} @_Z1gIfEvv() [[NUW]] + // CHECK: declare {{.*}} @_Z1gIfEvv() [[NUW2]] void (*g1)() = &g; // CHECK: declare {{.*}} @_Z1gIdEvv() // CHECK-NOT: [[NUW]] void (*g2)() = &g; - // CHECK: declare {{.*}} @_ZN1SIfE1gEv() [[NUW]] + // CHECK: declare {{.*}} @_ZN1SIfE1gEv() [[NUW2]] void (*g3)() = &S::g; // CHECK: declare {{.*}} @_ZN1SIdE1gEv() // CHECK-NOT: [[NUW]] void (*g4)() = &S::g; - // CHECK: declare {{.*}} @_Z1gIA4_cEvv() [[NUW]] + // CHECK: declare {{.*}} @_Z1gIA4_cEvv() [[NUW2]] (void)&g; // CHECK: declare {{.*}} @_Z1gIcEvv() // CHECK-NOT: [[NUW]] (void)&g; - // CHECK: declare {{.*}} @_ZN1SIA4_cE1gEv() [[NUW]] + // CHECK: declare {{.*}} @_ZN1SIA4_cE1gEv() [[NUW2]] (void)&S::g; // CHECK: declare {{.*}} @_ZN1SIcE1gEv() // CHECK-NOT: [[NUW]] @@ -116,12 +116,15 @@ void j() { // CHECK: declare {{.*}} @_ZN6NestedIiE1fILb1EcEEvv( // CHECK-NOT: [[NUW]]
[PATCH] D14935: Fix nodefaultlibs/nostdlib check
niravd created this revision. niravd added reviewers: dougk, jyknight. niravd added subscribers: cfe-commits, rsmith. Checks for nostdlib should also always check nodefaultlibs or nostartfiles as appropriate. Clang Driver misses a case http://reviews.llvm.org/D14935 Files: lib/Driver/Driver.cpp test/Driver/nodefaultlib_stdc.c Index: test/Driver/nodefaultlib_stdc.c === --- /dev/null +++ test/Driver/nodefaultlib_stdc.c @@ -0,0 +1,3 @@ +// RUN: %clang -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck %s +// CHECK-NOT: "-lc++" +// CHECK: "-lstdc++" Index: lib/Driver/Driver.cpp === --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -209,6 +209,7 @@ DerivedArgList *DAL = new DerivedArgList(Args); bool HasNostdlib = Args.hasArg(options::OPT_nostdlib); + bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs); for (Arg *A : Args) { // Unfortunately, we have to parse some forwarding options (-Xassembler, // -Xlinker, -Xpreprocessor) because we either integrate their functionality @@ -252,7 +253,7 @@ StringRef Value = A->getValue(); // Rewrite unless -nostdlib is present. - if (!HasNostdlib && Value == "stdc++") { + if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") { DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx)); continue; } Index: test/Driver/nodefaultlib_stdc.c === --- /dev/null +++ test/Driver/nodefaultlib_stdc.c @@ -0,0 +1,3 @@ +// RUN: %clang -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck %s +// CHECK-NOT: "-lc++" +// CHECK: "-lstdc++" Index: lib/Driver/Driver.cpp === --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -209,6 +209,7 @@ DerivedArgList *DAL = new DerivedArgList(Args); bool HasNostdlib = Args.hasArg(options::OPT_nostdlib); + bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs); for (Arg *A : Args) { // Unfortunately, we have to parse some forwarding options (-Xassembler, // -Xlinker, -Xpreprocessor) because we either integrate their functionality @@ -252,7 +253,7 @@ StringRef Value = A->getValue(); // Rewrite unless -nostdlib is present. - if (!HasNostdlib && Value == "stdc++") { + if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") { DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx)); continue; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D14935: Fix nodefaultlibs/nostdlib check
niravd updated this revision to Diff 41040. niravd added a comment. Fix review issues http://reviews.llvm.org/D14935 Files: lib/Driver/Driver.cpp test/Driver/nodefaultlib.c Index: test/Driver/nodefaultlib.c === --- test/Driver/nodefaultlib.c +++ test/Driver/nodefaultlib.c @@ -1,8 +1,10 @@ -// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t -// RUN: FileCheck < %t %s -// -// CHECK-NOT: start-group -// CHECK-NOT: "-lgcc" -// CHECK-NOT: "-lc" -// CHECK: crtbegin -// CHECK: crtend +// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=TEST1 %s +// TEST1-NOT: start-group +// TEST1-NOT: "-lgcc" +// TEST1-NOT: "-lc" +// TEST1: crtbegin +// TEST1: crtend + +// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s +// TEST2-NOT: "-lc++" +// TEST2: "-lstdc++" Index: lib/Driver/Driver.cpp === --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -209,6 +209,7 @@ DerivedArgList *DAL = new DerivedArgList(Args); bool HasNostdlib = Args.hasArg(options::OPT_nostdlib); + bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs); for (Arg *A : Args) { // Unfortunately, we have to parse some forwarding options (-Xassembler, // -Xlinker, -Xpreprocessor) because we either integrate their functionality @@ -252,7 +253,7 @@ StringRef Value = A->getValue(); // Rewrite unless -nostdlib is present. - if (!HasNostdlib && Value == "stdc++") { + if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") { DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx)); continue; } Index: test/Driver/nodefaultlib.c === --- test/Driver/nodefaultlib.c +++ test/Driver/nodefaultlib.c @@ -1,8 +1,10 @@ -// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t -// RUN: FileCheck < %t %s -// -// CHECK-NOT: start-group -// CHECK-NOT: "-lgcc" -// CHECK-NOT: "-lc" -// CHECK: crtbegin -// CHECK: crtend +// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=TEST1 %s +// TEST1-NOT: start-group +// TEST1-NOT: "-lgcc" +// TEST1-NOT: "-lc" +// TEST1: crtbegin +// TEST1: crtend + +// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s +// TEST2-NOT: "-lc++" +// TEST2: "-lstdc++" Index: lib/Driver/Driver.cpp === --- lib/Driver/Driver.cpp +++ lib/Driver/Driver.cpp @@ -209,6 +209,7 @@ DerivedArgList *DAL = new DerivedArgList(Args); bool HasNostdlib = Args.hasArg(options::OPT_nostdlib); + bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs); for (Arg *A : Args) { // Unfortunately, we have to parse some forwarding options (-Xassembler, // -Xlinker, -Xpreprocessor) because we either integrate their functionality @@ -252,7 +253,7 @@ StringRef Value = A->getValue(); // Rewrite unless -nostdlib is present. - if (!HasNostdlib && Value == "stdc++") { + if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") { DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx)); continue; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r253990 - Fix rewrite of reserved library name in case of -nodefaultlibs
Author: niravd Date: Tue Nov 24 10:07:21 2015 New Revision: 253990 URL: http://llvm.org/viewvc/llvm-project?rev=253990&view=rev Log: Fix rewrite of reserved library name in case of -nodefaultlibs The Driver only checked if nostdlib was set when deciding to add reserved_lib_stdcxx, but as nostdlib is always exactly nodefaultlibs and nostartfiles we should be checking one (clearly nodefaultlibs in the case) as well. This appears to be the only such instance of this in the codebase. Differential Revision: http://reviews.llvm.org/D14935 Modified: cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/test/Driver/nodefaultlib.c Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=253990&r1=253989&r2=253990&view=diff == --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Tue Nov 24 10:07:21 2015 @@ -209,6 +209,7 @@ DerivedArgList *Driver::TranslateInputAr DerivedArgList *DAL = new DerivedArgList(Args); bool HasNostdlib = Args.hasArg(options::OPT_nostdlib); + bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs); for (Arg *A : Args) { // Unfortunately, we have to parse some forwarding options (-Xassembler, // -Xlinker, -Xpreprocessor) because we either integrate their functionality @@ -252,7 +253,7 @@ DerivedArgList *Driver::TranslateInputAr StringRef Value = A->getValue(); // Rewrite unless -nostdlib is present. - if (!HasNostdlib && Value == "stdc++") { + if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") { DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx)); continue; } Modified: cfe/trunk/test/Driver/nodefaultlib.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/nodefaultlib.c?rev=253990&r1=253989&r2=253990&view=diff == --- cfe/trunk/test/Driver/nodefaultlib.c (original) +++ cfe/trunk/test/Driver/nodefaultlib.c Tue Nov 24 10:07:21 2015 @@ -1,8 +1,10 @@ -// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t -// RUN: FileCheck < %t %s -// -// CHECK-NOT: start-group -// CHECK-NOT: "-lgcc" -// CHECK-NOT: "-lc" -// CHECK: crtbegin -// CHECK: crtend +// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=TEST1 %s +// TEST1-NOT: start-group +// TEST1-NOT: "-lgcc" +// TEST1-NOT: "-lc" +// TEST1: crtbegin +// TEST1: crtend + +// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s +// TEST2-NOT: "-lc++" +// TEST2: "-lstdc++" ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D14935: Fix rewrite of reserved library name in case of -nodefaultlibs
This revision was automatically updated to reflect the committed changes. Closed by commit rL253990: Fix rewrite of reserved library name in case of -nodefaultlibs (authored by niravd). Changed prior to commit: http://reviews.llvm.org/D14935?vs=41040&id=41052#toc Repository: rL LLVM http://reviews.llvm.org/D14935 Files: cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/test/Driver/nodefaultlib.c Index: cfe/trunk/test/Driver/nodefaultlib.c === --- cfe/trunk/test/Driver/nodefaultlib.c +++ cfe/trunk/test/Driver/nodefaultlib.c @@ -1,8 +1,10 @@ -// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t -// RUN: FileCheck < %t %s -// -// CHECK-NOT: start-group -// CHECK-NOT: "-lgcc" -// CHECK-NOT: "-lc" -// CHECK: crtbegin -// CHECK: crtend +// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=TEST1 %s +// TEST1-NOT: start-group +// TEST1-NOT: "-lgcc" +// TEST1-NOT: "-lc" +// TEST1: crtbegin +// TEST1: crtend + +// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s +// TEST2-NOT: "-lc++" +// TEST2: "-lstdc++" Index: cfe/trunk/lib/Driver/Driver.cpp === --- cfe/trunk/lib/Driver/Driver.cpp +++ cfe/trunk/lib/Driver/Driver.cpp @@ -209,6 +209,7 @@ DerivedArgList *DAL = new DerivedArgList(Args); bool HasNostdlib = Args.hasArg(options::OPT_nostdlib); + bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs); for (Arg *A : Args) { // Unfortunately, we have to parse some forwarding options (-Xassembler, // -Xlinker, -Xpreprocessor) because we either integrate their functionality @@ -252,7 +253,7 @@ StringRef Value = A->getValue(); // Rewrite unless -nostdlib is present. - if (!HasNostdlib && Value == "stdc++") { + if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") { DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx)); continue; } Index: cfe/trunk/test/Driver/nodefaultlib.c === --- cfe/trunk/test/Driver/nodefaultlib.c +++ cfe/trunk/test/Driver/nodefaultlib.c @@ -1,8 +1,10 @@ -// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t -// RUN: FileCheck < %t %s -// -// CHECK-NOT: start-group -// CHECK-NOT: "-lgcc" -// CHECK-NOT: "-lc" -// CHECK: crtbegin -// CHECK: crtend +// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=TEST1 %s +// TEST1-NOT: start-group +// TEST1-NOT: "-lgcc" +// TEST1-NOT: "-lc" +// TEST1: crtbegin +// TEST1: crtend + +// RUN: %clang -target i686-pc-linux-gnu -stdlib=libc++ -nodefaultlibs -lstdc++ -### %s 2>&1 | FileCheck -check-prefix=TEST2 %s +// TEST2-NOT: "-lc++" +// TEST2: "-lstdc++" Index: cfe/trunk/lib/Driver/Driver.cpp === --- cfe/trunk/lib/Driver/Driver.cpp +++ cfe/trunk/lib/Driver/Driver.cpp @@ -209,6 +209,7 @@ DerivedArgList *DAL = new DerivedArgList(Args); bool HasNostdlib = Args.hasArg(options::OPT_nostdlib); + bool HasNodefaultlib = Args.hasArg(options::OPT_nodefaultlibs); for (Arg *A : Args) { // Unfortunately, we have to parse some forwarding options (-Xassembler, // -Xlinker, -Xpreprocessor) because we either integrate their functionality @@ -252,7 +253,7 @@ StringRef Value = A->getValue(); // Rewrite unless -nostdlib is present. - if (!HasNostdlib && Value == "stdc++") { + if (!HasNostdlib && !HasNodefaultlib && Value == "stdc++") { DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_reserved_lib_stdcxx)); continue; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits