r329300 - Disable -fmerge-all-constants as default.

Manoj Gupta via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 6 08:24:41 PDT 2018


Sure, will update.

Thanks,
Manoj

On Fri, Apr 6, 2018 at 4:56 AM Nico Weber <thakis at chromium.org> wrote:

> This should probably get a release notes entry. Can you write one?
>
> On Thu, Apr 5, 2018 at 11:29 AM, Manoj Gupta via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> Author: manojgupta
>> Date: Thu Apr  5 08:29:52 2018
>> New Revision: 329300
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=329300&view=rev
>> Log:
>> Disable -fmerge-all-constants as default.
>>
>> Summary:
>> "-fmerge-all-constants" is a non-conforming optimization and should not
>> be the default. It is also causing miscompiles when building Linux
>> Kernel (https://lkml.org/lkml/2018/3/20/872).
>>
>> Fixes PR18538.
>>
>> Reviewers: rjmccall, rsmith, chandlerc
>>
>> Reviewed By: rsmith, chandlerc
>>
>> Subscribers: srhines, cfe-commits
>>
>> Differential Revision: https://reviews.llvm.org/D45289
>>
>> Modified:
>>     cfe/trunk/include/clang/Driver/Options.td
>>     cfe/trunk/lib/AST/ExprConstant.cpp
>>     cfe/trunk/lib/Driver/ToolChains/Clang.cpp
>>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>>     cfe/trunk/test/CodeGen/array-init.c
>>     cfe/trunk/test/CodeGen/decl.c
>>     cfe/trunk/test/CodeGenCXX/const-init-cxx11.cpp
>>     cfe/trunk/test/CodeGenCXX/cxx0x-initializer-references.cpp
>>     cfe/trunk/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
>>     cfe/trunk/test/CodeGenObjCXX/arc-cxx11-init-list.mm
>>     cfe/trunk/test/Driver/clang_f_opts.c
>>
>> Modified: cfe/trunk/include/clang/Driver/Options.td
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/include/clang/Driver/Options.td (original)
>> +++ cfe/trunk/include/clang/Driver/Options.td Thu Apr  5 08:29:52 2018
>> @@ -1133,7 +1133,8 @@ def fthinlto_index_EQ : Joined<["-"], "f
>>    HelpText<"Perform ThinLTO importing using provided function summary
>> index">;
>>  def fmacro_backtrace_limit_EQ : Joined<["-"], "fmacro-backtrace-limit=">,
>>                                  Group<f_Group>, Flags<[DriverOption,
>> CoreOption]>;
>> -def fmerge_all_constants : Flag<["-"], "fmerge-all-constants">,
>> Group<f_Group>;
>> +def fmerge_all_constants : Flag<["-"], "fmerge-all-constants">,
>> Group<f_Group>,
>> +  Flags<[CC1Option]>, HelpText<"Allow merging of constants">;
>>  def fmessage_length_EQ : Joined<["-"], "fmessage-length=">,
>> Group<f_Group>;
>>  def fms_extensions : Flag<["-"], "fms-extensions">, Group<f_Group>,
>> Flags<[CC1Option, CoreOption]>,
>>    HelpText<"Accept some non-standard constructs supported by the
>> Microsoft compiler">;
>> @@ -1282,7 +1283,7 @@ def fveclib : Joined<["-"], "fveclib=">,
>>  def fno_lax_vector_conversions : Flag<["-"],
>> "fno-lax-vector-conversions">, Group<f_Group>,
>>    HelpText<"Disallow implicit conversions between vectors with a
>> different number of elements or different element types">,
>> Flags<[CC1Option]>;
>>  def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">,
>> Group<f_Group>,
>> -    Flags<[CC1Option]>, HelpText<"Disallow merging of constants">;
>> +  HelpText<"Disallow merging of constants">;
>>  def fno_modules : Flag <["-"], "fno-modules">, Group<f_Group>,
>>    Flags<[DriverOption]>;
>>  def fno_implicit_module_maps : Flag <["-"], "fno-implicit-module-maps">,
>> Group<f_Group>,
>>
>> Modified: cfe/trunk/lib/AST/ExprConstant.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/AST/ExprConstant.cpp (original)
>> +++ cfe/trunk/lib/AST/ExprConstant.cpp Thu Apr  5 08:29:52 2018
>> @@ -8596,9 +8596,6 @@ bool IntExprEvaluator::VisitBinaryOperat
>>              (LHSValue.Base && isZeroSized(RHSValue)))
>>            return Error(E);
>>          // Pointers with different bases cannot represent the same
>> object.
>> -        // (Note that clang defaults to -fmerge-all-constants, which can
>> -        // lead to inconsistent results for comparisons involving the
>> address
>> -        // of a constant; this generally doesn't matter in practice.)
>>          return Success(E->getOpcode() == BO_NE, E);
>>        }
>>
>>
>> Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original)
>> +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Thu Apr  5 08:29:52 2018
>> @@ -3361,9 +3361,9 @@ void Clang::ConstructJob(Compilation &C,
>>
>>    Args.AddLastArg(CmdArgs, options::OPT_fveclib);
>>
>> -  if (!Args.hasFlag(options::OPT_fmerge_all_constants,
>> -                    options::OPT_fno_merge_all_constants))
>> -    CmdArgs.push_back("-fno-merge-all-constants");
>> +  if (Args.hasFlag(options::OPT_fmerge_all_constants,
>> +                   options::OPT_fno_merge_all_constants, false))
>> +    CmdArgs.push_back("-fmerge-all-constants");
>>
>>    // LLVM Code Generator Options.
>>
>>
>> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
>> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Thu Apr  5 08:29:52 2018
>> @@ -605,7 +605,7 @@ static bool ParseCodeGenArgs(CodeGenOpti
>>        Args.hasFlag(OPT_ffine_grained_bitfield_accesses,
>>                     OPT_fno_fine_grained_bitfield_accesses, false);
>>    Opts.DwarfDebugFlags = Args.getLastArgValue(OPT_dwarf_debug_flags);
>> -  Opts.MergeAllConstants = !Args.hasArg(OPT_fno_merge_all_constants);
>> +  Opts.MergeAllConstants = Args.hasArg(OPT_fmerge_all_constants);
>>    Opts.NoCommon = Args.hasArg(OPT_fno_common);
>>    Opts.NoImplicitFloat = Args.hasArg(OPT_no_implicit_float);
>>    Opts.OptimizeSize = getOptimizationLevelSize(Args);
>>
>> Modified: cfe/trunk/test/CodeGen/array-init.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/array-init.c?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/CodeGen/array-init.c (original)
>> +++ cfe/trunk/test/CodeGen/array-init.c Thu Apr  5 08:29:52 2018
>> @@ -1,8 +1,11 @@
>> -// RUN: %clang_cc1 %s -O0 -triple x86_64-unknown-linux-gnu -emit-llvm -o
>> - | FileCheck %s
>> +// RUN: %clang_cc1 %s -O0 -triple x86_64-unknown-linux-gnu -emit-llvm -o
>> - | FileCheck -check-prefix=CHECK-NO-MERGE-CONSTANTS %s
>> +// RUN: %clang_cc1 %s -O0 -triple x86_64-unknown-linux-gnu
>> -fmerge-all-constants -emit-llvm -o - | FileCheck
>> -check-prefix=CHECK-MERGE-CONSTANTS %s
>>
>> -// CHECK: @{{.*}}.a1 = internal constant [5 x i32] [i32 0, i32 1, i32 2,
>> i32 0, i32 0]
>> -// CHECK: @{{.*}}.a2 = internal constant [5 x i32] zeroinitializer
>> -// CHECK: @{{.*}}.a3 = internal constant [5 x i32] zeroinitializer
>> +// CHECK-NO-MERGE-CONSTANTS: @{{.*}}.a1 = private unnamed_addr constant
>> [5 x i32] [i32 0, i32 1, i32 2, i32 0, i32 0]
>> +
>> +// CHECK-MERGE-CONSTANTS: @{{.*}}.a1 = internal constant [5 x i32] [i32
>> 0, i32 1, i32 2, i32 0, i32 0]
>> +// CHECK-MERGE-CONSTANTS: @{{.*}}.a2 = internal constant [5 x i32]
>> zeroinitializer
>> +// CHECK-MERGE-CONSTANTS: @{{.*}}.a3 = internal constant [5 x i32]
>> zeroinitializer
>>
>>  void testConstArrayInits(void)
>>  {
>>
>> Modified: cfe/trunk/test/CodeGen/decl.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/decl.c?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/CodeGen/decl.c (original)
>> +++ cfe/trunk/test/CodeGen/decl.c Thu Apr  5 08:29:52 2018
>> @@ -1,4 +1,4 @@
>> -// RUN: %clang_cc1 -w -emit-llvm < %s | FileCheck %s
>> +// RUN: %clang_cc1 -w -fmerge-all-constants -emit-llvm < %s | FileCheck
>> %s
>>
>>  // CHECK: @test1.x = internal constant [12 x i32] [i32 1
>>  // CHECK: @test2.x = private unnamed_addr constant [13 x i32] [i32 1,
>>
>> Modified: cfe/trunk/test/CodeGenCXX/const-init-cxx11.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/const-init-cxx11.cpp?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenCXX/const-init-cxx11.cpp (original)
>> +++ cfe/trunk/test/CodeGenCXX/const-init-cxx11.cpp Thu Apr  5 08:29:52
>> 2018
>> @@ -1,4 +1,4 @@
>> -// RUN: %clang_cc1 -w -triple x86_64-elf-gnu -emit-llvm -o - %s
>> -std=c++11 | FileCheck %s
>> +// RUN: %clang_cc1 -w -fmerge-all-constants -triple x86_64-elf-gnu
>> -emit-llvm -o - %s -std=c++11 | FileCheck %s
>>
>>  // FIXME: The padding in all these objects should be zero-initialized.
>>  namespace StructUnion {
>>
>> Modified: cfe/trunk/test/CodeGenCXX/cxx0x-initializer-references.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx0x-initializer-references.cpp?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenCXX/cxx0x-initializer-references.cpp (original)
>> +++ cfe/trunk/test/CodeGenCXX/cxx0x-initializer-references.cpp Thu Apr  5
>> 08:29:52 2018
>> @@ -1,4 +1,4 @@
>> -// RUN: %clang_cc1 -std=c++11 -S -triple armv7-none-eabi -emit-llvm -o -
>> %s | FileCheck %s
>> +// RUN: %clang_cc1 -std=c++11 -S -triple armv7-none-eabi
>> -fmerge-all-constants -emit-llvm -o - %s | FileCheck %s
>>
>>  namespace reference {
>>    struct A {
>>
>> Modified:
>> cfe/trunk/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
>> (original)
>> +++ cfe/trunk/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
>> Thu Apr  5 08:29:52 2018
>> @@ -1,5 +1,5 @@
>> -// RUN: %clang_cc1 -std=c++11 -triple x86_64-none-linux-gnu -emit-llvm
>> -o - %s | FileCheck -check-prefixes=X86,CHECK %s
>> -// RUN: %clang_cc1 -std=c++11 -triple amdgcn-amd-amdhsa -DNO_TLS
>> -emit-llvm -o - %s | FileCheck -check-prefixes=AMDGCN,CHECK %s
>> +// RUN: %clang_cc1 -std=c++11 -triple x86_64-none-linux-gnu
>> -fmerge-all-constants -emit-llvm -o - %s | FileCheck
>> -check-prefixes=X86,CHECK %s
>> +// RUN: %clang_cc1 -std=c++11 -triple amdgcn-amd-amdhsa -DNO_TLS
>> -fmerge-all-constants -emit-llvm -o - %s | FileCheck
>> -check-prefixes=AMDGCN,CHECK %s
>>
>>  namespace std {
>>    typedef decltype(sizeof(int)) size_t;
>>
>> Modified: cfe/trunk/test/CodeGenObjCXX/arc-cxx11-init-list.mm
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/arc-cxx11-init-list.mm?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenObjCXX/arc-cxx11-init-list.mm (original)
>> +++ cfe/trunk/test/CodeGenObjCXX/arc-cxx11-init-list.mm Thu Apr  5
>> 08:29:52 2018
>> @@ -1,4 +1,4 @@
>> -// RUN: %clang_cc1 -triple armv7-ios5.0 -std=c++11 -fobjc-arc -Os
>> -emit-llvm -o - %s | FileCheck %s
>> +// RUN: %clang_cc1 -triple armv7-ios5.0 -std=c++11 -fmerge-all-constants
>> -fobjc-arc -Os -emit-llvm -o - %s | FileCheck %s
>>
>>  // CHECK: @[[STR0:.*]] = private unnamed_addr constant [5 x i8]
>> c"str0\00", section "__TEXT,__cstring,cstring_literals"
>>  // CHECK: @[[UNNAMED_CFSTRING0:.*]] = private global
>> %struct.__NSConstantString_tag { i32* getelementptr inbounds ([0 x i32], [0
>> x i32]* @__CFConstantStringClassReference, i32 0, i32 0), i32 1992, i8*
>> getelementptr inbounds ([5 x i8], [5 x i8]* @[[STR0]], i32 0, i32 0), i32 4
>> }, section "__DATA,__cfstring"
>>
>> Modified: cfe/trunk/test/Driver/clang_f_opts.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/clang_f_opts.c?rev=329300&r1=329299&r2=329300&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/Driver/clang_f_opts.c (original)
>> +++ cfe/trunk/test/Driver/clang_f_opts.c Thu Apr  5 08:29:52 2018
>> @@ -276,6 +276,7 @@
>>  // RUN:     -fno-inline-small-functions -finline-small-functions
>>       \
>>  // RUN:     -fno-fat-lto-objects -ffat-lto-objects
>>       \
>>  // RUN:     -fno-merge-constants -fmerge-constants
>>       \
>> +// RUN:     -fno-merge-all-constants -fmerge-all-constants
>>       \
>>  // RUN:     -fno-caller-saves -fcaller-saves
>>       \
>>  // RUN:     -fno-reorder-blocks -freorder-blocks
>>       \
>>  // RUN:     -fno-schedule-insns2 -fschedule-insns2
>>       \
>> @@ -522,3 +523,10 @@
>>  // RUN: %clang -### -S -fno-discard-value-names %s 2>&1 | FileCheck
>> -check-prefix=CHECK-NO-DISCARD-NAMES %s
>>  // CHECK-DISCARD-NAMES: "-discard-value-names"
>>  // CHECK-NO-DISCARD-NAMES-NOT: "-discard-value-names"
>> +//
>> +// RUN: %clang -### -S -fmerge-all-constants %s 2>&1 | FileCheck
>> -check-prefix=CHECK-MERGE-ALL-CONSTANTS %s
>> +// RUN: %clang -### -S -fno-merge-all-constants %s 2>&1 | FileCheck
>> -check-prefix=CHECK-NO-MERGE-ALL-CONSTANTS %s
>> +// RUN: %clang -### -S -fmerge-all-constants -fno-merge-all-constants %s
>> 2>&1 | FileCheck -check-prefix=CHECK-NO-MERGE-ALL-CONSTANTS %s
>> +// RUN: %clang -### -S -fno-merge-all-constants -fmerge-all-constants %s
>> 2>&1 | FileCheck -check-prefix=CHECK-MERGE-ALL-CONSTANTS %s
>> +// CHECK-NO-MERGE-ALL-CONSTANTS-NOT: "-fmerge-all-constants"
>> +// CHECK-MERGE-ALL-CONSTANTS: "-fmerge-all-constants"
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180406/5a291bd0/attachment-0001.html>


More information about the cfe-commits mailing list