Author: tstellar
Date: Wed May 30 10:33:01 2018
New Revision: 333564

URL: http://llvm.org/viewvc/llvm-project?rev=333564&view=rev
Log:
Merging r329300:

------------------------------------------------------------------------
r329300 | manojgupta | 2018-04-05 08:29:52 -0700 (Thu, 05 Apr 2018) | 16 lines

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/branches/release_60/include/clang/Driver/Options.td
    cfe/branches/release_60/lib/AST/ExprConstant.cpp
    cfe/branches/release_60/lib/Driver/ToolChains/Clang.cpp
    cfe/branches/release_60/lib/Frontend/CompilerInvocation.cpp
    cfe/branches/release_60/test/CodeGen/decl.c
    cfe/branches/release_60/test/CodeGenCXX/const-init-cxx11.cpp
    cfe/branches/release_60/test/CodeGenCXX/cxx0x-initializer-references.cpp
    
cfe/branches/release_60/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
    cfe/branches/release_60/test/CodeGenObjCXX/arc-cxx11-init-list.mm
    cfe/branches/release_60/test/Driver/clang_f_opts.c

Modified: cfe/branches/release_60/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/include/clang/Driver/Options.td?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- cfe/branches/release_60/include/clang/Driver/Options.td (original)
+++ cfe/branches/release_60/include/clang/Driver/Options.td Wed May 30 10:33:01 
2018
@@ -1100,7 +1100,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">;
@@ -1249,7 +1250,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/branches/release_60/lib/AST/ExprConstant.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/lib/AST/ExprConstant.cpp?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- cfe/branches/release_60/lib/AST/ExprConstant.cpp (original)
+++ cfe/branches/release_60/lib/AST/ExprConstant.cpp Wed May 30 10:33:01 2018
@@ -8543,9 +8543,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/branches/release_60/lib/Driver/ToolChains/Clang.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/lib/Driver/ToolChains/Clang.cpp?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- cfe/branches/release_60/lib/Driver/ToolChains/Clang.cpp (original)
+++ cfe/branches/release_60/lib/Driver/ToolChains/Clang.cpp Wed May 30 10:33:01 
2018
@@ -3288,9 +3288,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/branches/release_60/lib/Frontend/CompilerInvocation.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/lib/Frontend/CompilerInvocation.cpp?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- cfe/branches/release_60/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/branches/release_60/lib/Frontend/CompilerInvocation.cpp Wed May 30 
10:33:01 2018
@@ -552,7 +552,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/branches/release_60/test/CodeGen/decl.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/test/CodeGen/decl.c?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- cfe/branches/release_60/test/CodeGen/decl.c (original)
+++ cfe/branches/release_60/test/CodeGen/decl.c Wed May 30 10:33:01 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/branches/release_60/test/CodeGenCXX/const-init-cxx11.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/test/CodeGenCXX/const-init-cxx11.cpp?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- cfe/branches/release_60/test/CodeGenCXX/const-init-cxx11.cpp (original)
+++ cfe/branches/release_60/test/CodeGenCXX/const-init-cxx11.cpp Wed May 30 
10:33:01 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/branches/release_60/test/CodeGenCXX/cxx0x-initializer-references.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/test/CodeGenCXX/cxx0x-initializer-references.cpp?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- cfe/branches/release_60/test/CodeGenCXX/cxx0x-initializer-references.cpp 
(original)
+++ cfe/branches/release_60/test/CodeGenCXX/cxx0x-initializer-references.cpp 
Wed May 30 10:33:01 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/branches/release_60/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- 
cfe/branches/release_60/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
 (original)
+++ 
cfe/branches/release_60/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp
 Wed May 30 10:33:01 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-amdgiz -DNO_TLS 
-emit-llvm -o - %s | FileCheck -check-prefixes=AMD,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-amdgiz -DNO_TLS 
-fmerge-all-constants -emit-llvm -o - %s | FileCheck -check-prefixes=AMD,CHECK 
%s
 
 namespace std {
   typedef decltype(sizeof(int)) size_t;

Modified: cfe/branches/release_60/test/CodeGenObjCXX/arc-cxx11-init-list.mm
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/test/CodeGenObjCXX/arc-cxx11-init-list.mm?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- cfe/branches/release_60/test/CodeGenObjCXX/arc-cxx11-init-list.mm (original)
+++ cfe/branches/release_60/test/CodeGenObjCXX/arc-cxx11-init-list.mm Wed May 
30 10:33:01 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/branches/release_60/test/Driver/clang_f_opts.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/test/Driver/clang_f_opts.c?rev=333564&r1=333563&r2=333564&view=diff
==============================================================================
--- cfe/branches/release_60/test/Driver/clang_f_opts.c (original)
+++ cfe/branches/release_60/test/Driver/clang_f_opts.c Wed May 30 10:33:01 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                            \
@@ -503,3 +504,9 @@
 // CHECK-WINDOWS-ISO10646: "-fwchar-type=int"
 // CHECK-WINDOWS-ISO10646: "-fsigned-wchar"
 
+// 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"


_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to