kosarev created this revision. kosarev added a project: clang. This patch starts a series of changes to add support for the new TBAA metadata format proposed in this llvm-dev thread:
http://lists.llvm.org/pipermail/llvm-dev/2017-November/118748.html Repository: rL LLVM https://reviews.llvm.org/D39955 Files: include/clang/Driver/CC1Options.td include/clang/Driver/Options.td include/clang/Frontend/CodeGenOptions.def lib/Driver/ToolChains/Clang.cpp lib/Frontend/CompilerInvocation.cpp test/Driver/tbaa.c
Index: test/Driver/tbaa.c =================================================================== --- test/Driver/tbaa.c +++ test/Driver/tbaa.c @@ -0,0 +1,30 @@ +// Test translation of TBAA-related clang options to cc1 options. + +// RUN: %clang -### -target x86_64-unknown-linux \ +// RUN: -fno-struct-path-tbaa %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK-NO_PATH %s +// RUN: %clang -### -target x86_64-unknown-linux \ +// RUN: -fstruct-path-tbaa -fno-struct-path-tbaa %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK-NO_PATH %s +// RUN: %clang -### -target x86_64-unknown-linux \ +// RUN: -fnew-struct-path-tbaa -fno-struct-path-tbaa %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK-NO_PATH %s +// CHECK-NO_PATH: "-cc1" +// CHECK-NO_PATH-NOT: "-new-struct-path-tbaa" +// CHECK-NO_PATH-SAME: "-no-struct-path-tbaa" +// CHECK-NO_PATH-NOT: "-new-struct-path-tbaa" + +// RUN: %clang -### -target x86_64-unknown-linux \ +// RUN: -fstruct-path-tbaa %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK-PATH %s +// CHECK-PATH: "-cc1" +// CHECK-PATH-NOT: "-no-struct-path-tbaa" +// CHECK-PATH-NOT: "-new-struct-path-tbaa" + +// RUN: %clang -### -target x86_64-unknown-linux \ +// RUN: -fnew-struct-path-tbaa %s 2>&1 | \ +// RUN: FileCheck --check-prefix=CHECK-NEW_PATH %s +// CHECK-NEW_PATH: "-cc1" +// CHECK-NEW_PATH-NOT: "-no-struct-path-tbaa" +// CHECK-NEW_PATH: "-new-struct-path-tbaa" +// CHECK-NEW_PATH-NOT: "-no-struct-path-tbaa" Index: lib/Frontend/CompilerInvocation.cpp =================================================================== --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -546,6 +546,8 @@ OPT_fuse_register_sized_bitfield_access); Opts.RelaxedAliasing = Args.hasArg(OPT_relaxed_aliasing); Opts.StructPathTBAA = !Args.hasArg(OPT_no_struct_path_tbaa); + Opts.NewStructPathTBAA = !Args.hasArg(OPT_no_struct_path_tbaa) && + Args.hasArg(OPT_new_struct_path_tbaa); Opts.FineGrainedBitfieldAccesses = Args.hasFlag(OPT_ffine_grained_bitfield_accesses, OPT_fno_fine_grained_bitfield_accesses, false); Index: lib/Driver/ToolChains/Clang.cpp =================================================================== --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -3334,9 +3334,15 @@ if (!Args.hasFlag(options::OPT_fstrict_aliasing, StrictAliasingAliasOption, options::OPT_fno_strict_aliasing, TBAAOnByDefault)) CmdArgs.push_back("-relaxed-aliasing"); - if (!Args.hasFlag(options::OPT_fstruct_path_tbaa, - options::OPT_fno_struct_path_tbaa)) + bool StructPathTBAA = Args.hasFlag(options::OPT_fstruct_path_tbaa, + options::OPT_fno_struct_path_tbaa); + bool NewStructPathTBAA = Args.hasFlag(options::OPT_fnew_struct_path_tbaa, + options::OPT_fno_struct_path_tbaa, + false); + if (!StructPathTBAA && !NewStructPathTBAA) CmdArgs.push_back("-no-struct-path-tbaa"); + if (NewStructPathTBAA) + CmdArgs.push_back("-new-struct-path-tbaa"); if (Args.hasFlag(options::OPT_fstrict_enums, options::OPT_fno_strict_enums, false)) CmdArgs.push_back("-fstrict-enums"); Index: include/clang/Frontend/CodeGenOptions.def =================================================================== --- include/clang/Frontend/CodeGenOptions.def +++ include/clang/Frontend/CodeGenOptions.def @@ -142,6 +142,7 @@ CODEGENOPT(RelaxAll , 1, 0) ///< Relax all machine code instructions. CODEGENOPT(RelaxedAliasing , 1, 0) ///< Set when -fno-strict-aliasing is enabled. CODEGENOPT(StructPathTBAA , 1, 0) ///< Whether or not to use struct-path TBAA. +CODEGENOPT(NewStructPathTBAA , 1, 0) ///< Whether or not to use new struct-path TBAA. CODEGENOPT(SaveTempLabels , 1, 0) ///< Save temporary labels. CODEGENOPT(SanitizeAddressUseAfterScope , 1, 0) ///< Enable use-after-scope detection ///< in AddressSanitizer Index: include/clang/Driver/Options.td =================================================================== --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1272,6 +1272,7 @@ def fno_strict_aliasing : Flag<["-"], "fno-strict-aliasing">, Group<f_Group>, Flags<[DriverOption, CoreOption]>; def fstruct_path_tbaa : Flag<["-"], "fstruct-path-tbaa">, Group<f_Group>; +def fnew_struct_path_tbaa : Flag<["-"], "fnew-struct-path-tbaa">, Group<f_Group>; def fno_struct_path_tbaa : Flag<["-"], "fno-struct-path-tbaa">, Group<f_Group>; def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group<f_Group>; def fno_strict_vtable_pointers: Flag<["-"], "fno-strict-vtable-pointers">, Index: include/clang/Driver/CC1Options.td =================================================================== --- include/clang/Driver/CC1Options.td +++ include/clang/Driver/CC1Options.td @@ -244,6 +244,8 @@ HelpText<"Turn off Type Based Alias Analysis">; def no_struct_path_tbaa : Flag<["-"], "no-struct-path-tbaa">, HelpText<"Turn off struct-path aware Type Based Alias Analysis">; +def new_struct_path_tbaa : Flag<["-"], "new-struct-path-tbaa">, + HelpText<"Enable enhanced struct-path aware Type Based Alias Analysis">; def masm_verbose : Flag<["-"], "masm-verbose">, HelpText<"Generate verbose assembly output">; def mcode_model : Separate<["-"], "mcode-model">,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits