From 6a9366c0c633c4518d55685d4f3b289ef99c0bd1 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Tue, 20 May 2014 21:25:34 +0000 Subject: [PATCH] Move the function and data section flags into the options struct and make the functions to set them non-static. Move and rename the llvm specific backend options to avoid conflicting with the clang option. Paired with a backend commit to update. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209238 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/CommandFlags.h | 11 +++++ include/llvm/Target/TargetMachine.h | 8 ++-- include/llvm/Target/TargetOptions.h | 14 ++++-- lib/Target/TargetMachine.cpp | 21 +++----- test/CodeGen/X86/global-sections.ll | 74 ++++++++++++++--------------- test/DebugInfo/X86/cu-ranges.ll | 2 +- 6 files changed, 69 insertions(+), 61 deletions(-) diff --git a/include/llvm/CodeGen/CommandFlags.h b/include/llvm/CodeGen/CommandFlags.h index ac789e4af8a..2956ad8ea33 100644 --- a/include/llvm/CodeGen/CommandFlags.h +++ b/include/llvm/CodeGen/CommandFlags.h @@ -193,6 +193,15 @@ cl::opt StartAfter("start-after", cl::value_desc("pass-name"), cl::init("")); +cl::opt DataSections("data-sections", + cl::desc("Emit data into separate sections"), + cl::init(false)); + +cl::opt +FunctionSections("function-sections", + cl::desc("Emit functions into separate sections"), + cl::init(false)); + // Common utility function tightly tied to the options listed here. Initializes // a TargetOptions object with CodeGen flags and returns it. static inline TargetOptions InitTargetOptionsFromCodeGenFlags() { @@ -215,6 +224,8 @@ static inline TargetOptions InitTargetOptionsFromCodeGenFlags() { Options.TrapFuncName = TrapFuncName; Options.PositionIndependentExecutable = EnablePIE; Options.UseInitArray = UseInitArray; + Options.DataSections = DataSections; + Options.FunctionSections = FunctionSections; Options.MCOptions = InitMCTargetOptionsFromFlags(); diff --git a/include/llvm/Target/TargetMachine.h b/include/llvm/Target/TargetMachine.h index bf6963b7965..17ebd07e5d7 100644 --- a/include/llvm/Target/TargetMachine.h +++ b/include/llvm/Target/TargetMachine.h @@ -195,18 +195,18 @@ public: /// getDataSections - Return true if data objects should be emitted into their /// own section, corresponds to -fdata-sections. - static bool getDataSections(); + bool getDataSections() const; /// getFunctionSections - Return true if functions should be emitted into /// their own section, corresponding to -ffunction-sections. - static bool getFunctionSections(); + bool getFunctionSections() const; /// setDataSections - Set if the data are emit into separate sections. - static void setDataSections(bool); + void setDataSections(bool); /// setFunctionSections - Set if the functions are emit into separate /// sections. - static void setFunctionSections(bool); + void setFunctionSections(bool); /// \brief Register analysis passes for this target with a pass manager. virtual void addAnalysisPasses(PassManagerBase &) {} diff --git a/include/llvm/Target/TargetOptions.h b/include/llvm/Target/TargetOptions.h index 188395968bb..636eaf5c05e 100644 --- a/include/llvm/Target/TargetOptions.h +++ b/include/llvm/Target/TargetOptions.h @@ -50,10 +50,10 @@ namespace llvm { JITEmitDebugInfoToDisk(false), GuaranteedTailCallOpt(false), DisableTailCalls(false), StackAlignmentOverride(0), EnableFastISel(false), PositionIndependentExecutable(false), - UseInitArray(false), - DisableIntegratedAS(false), CompressDebugSections(false), - TrapUnreachable(false), - TrapFuncName(""), FloatABIType(FloatABI::Default), + UseInitArray(false), DisableIntegratedAS(false), + CompressDebugSections(false), FunctionSections(false), + DataSections(false), TrapUnreachable(false), TrapFuncName(""), + FloatABIType(FloatABI::Default), AllowFPOpFusion(FPOpFusion::Standard) {} /// PrintMachineCode - This flag is enabled when the -print-machineinstrs @@ -164,6 +164,12 @@ namespace llvm { /// Compress DWARF debug sections. unsigned CompressDebugSections : 1; + /// Emit functions into separate sections. + unsigned FunctionSections : 1; + + /// Emit data into separate sections. + unsigned DataSections : 1; + /// Emit target-specific trap instruction for 'unreachable' IR instructions. unsigned TrapUnreachable : 1; diff --git a/lib/Target/TargetMachine.cpp b/lib/Target/TargetMachine.cpp index f79cdfd0a79..4ccf5194947 100644 --- a/lib/Target/TargetMachine.cpp +++ b/lib/Target/TargetMachine.cpp @@ -36,15 +36,6 @@ namespace llvm { bool AsmVerbosityDefault(false); } -static cl::opt -DataSections("fdata-sections", - cl::desc("Emit data into separate sections"), - cl::init(false)); -static cl::opt -FunctionSections("ffunction-sections", - cl::desc("Emit functions into separate sections"), - cl::init(false)); - //--------------------------------------------------------------------------- // TargetMachine Class // @@ -179,20 +170,20 @@ void TargetMachine::setAsmVerbosityDefault(bool V) { AsmVerbosityDefault = V; } -bool TargetMachine::getFunctionSections() { - return FunctionSections; +bool TargetMachine::getFunctionSections() const { + return Options.FunctionSections; } -bool TargetMachine::getDataSections() { - return DataSections; +bool TargetMachine::getDataSections() const { + return Options.DataSections; } void TargetMachine::setFunctionSections(bool V) { - FunctionSections = V; + Options.FunctionSections = V; } void TargetMachine::setDataSections(bool V) { - DataSections = V; + Options.DataSections = V; } void TargetMachine::getNameWithPrefix(SmallVectorImpl &Name, diff --git a/test/CodeGen/X86/global-sections.ll b/test/CodeGen/X86/global-sections.ll index 7f123c10672..c763f3947e5 100644 --- a/test/CodeGen/X86/global-sections.ll +++ b/test/CodeGen/X86/global-sections.ll @@ -2,8 +2,8 @@ ; RUN: llc < %s -mtriple=i386-apple-darwin9.7 | FileCheck %s -check-prefix=DARWIN ; RUN: llc < %s -mtriple=i386-apple-darwin10 -relocation-model=static | FileCheck %s -check-prefix=DARWIN-STATIC ; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s -check-prefix=DARWIN64 -; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -fdata-sections | FileCheck %s -check-prefix=LINUX-SECTIONS -; RUN: llc < %s -mtriple=i686-pc-win32 -fdata-sections -ffunction-sections | FileCheck %s -check-prefix=WIN32-SECTIONS +; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -data-sections | FileCheck %s -check-prefix=LINUX-SECTIONS +; RUN: llc < %s -mtriple=i686-pc-win32 -data-sections -function-sections | FileCheck %s -check-prefix=WIN32-SECTIONS define void @F1() { ret void @@ -18,13 +18,13 @@ define void @F1() { ; LINUX: .type G1,@object ; LINUX: .comm G1,4,4 -; DARWIN: .comm _G1,4,2 +; DARWIN: .comm _G1,4,2 ; const int G2 __attribute__((weak)) = 42; -@G2 = weak_odr unnamed_addr constant i32 42 +@G2 = weak_odr unnamed_addr constant i32 42 ; TODO: linux drops this into .rodata, we drop it into ".gnu.linkonce.r.G2" @@ -85,25 +85,25 @@ define void @F1() { ; PR4584 @"foo bar" = linkonce global i32 42 -; LINUX: .type "foo bar",@object +; LINUX: .type "foo bar",@object ; LINUX: .section ".data.foo bar","aGw",@progbits,"foo bar",comdat -; LINUX: .weak "foo bar" +; LINUX: .weak "foo bar" ; LINUX: "foo bar": -; DARWIN: .section __DATA,__datacoal_nt,coalesced -; DARWIN: .globl "_foo bar" -; DARWIN: .weak_definition "_foo bar" +; DARWIN: .section __DATA,__datacoal_nt,coalesced +; DARWIN: .globl "_foo bar" +; DARWIN: .weak_definition "_foo bar" ; DARWIN: "_foo bar": ; PR4650 @G6 = weak_odr unnamed_addr constant [1 x i8] c"\01" -; LINUX: .type G6,@object -; LINUX: .section .rodata.G6,"aG",@progbits,G6,comdat -; LINUX: .weak G6 +; LINUX: .type G6,@object +; LINUX: .section .rodata.G6,"aG",@progbits,G6,comdat +; LINUX: .weak G6 ; LINUX: G6: -; LINUX: .byte 1 -; LINUX: .size G6, 1 +; LINUX: .byte 1 +; LINUX: .size G6, 1 ; DARWIN: .section __TEXT,__const_coal,coalesced ; DARWIN: .globl _G6 @@ -114,58 +114,58 @@ define void @F1() { @G7 = unnamed_addr constant [10 x i8] c"abcdefghi\00" -; DARWIN: __TEXT,__cstring,cstring_literals -; DARWIN: .globl _G7 +; DARWIN: __TEXT,__cstring,cstring_literals +; DARWIN: .globl _G7 ; DARWIN: _G7: -; DARWIN: .asciz "abcdefghi" +; DARWIN: .asciz "abcdefghi" -; LINUX: .section .rodata.str1.1,"aMS",@progbits,1 -; LINUX: .globl G7 +; LINUX: .section .rodata.str1.1,"aMS",@progbits,1 +; LINUX: .globl G7 ; LINUX: G7: -; LINUX: .asciz "abcdefghi" +; LINUX: .asciz "abcdefghi" ; LINUX-SECTIONS: .section .rodata.G7,"aMS",@progbits,1 -; LINUX-SECTIONS: .globl G7 +; LINUX-SECTIONS: .globl G7 ; WIN32-SECTIONS: .section .rdata,"rd",one_only,_G7 -; WIN32-SECTIONS: .globl _G7 +; WIN32-SECTIONS: .globl _G7 @G8 = unnamed_addr constant [4 x i16] [ i16 1, i16 2, i16 3, i16 0 ] -; DARWIN: .section __TEXT,__const -; DARWIN: .globl _G8 +; DARWIN: .section __TEXT,__const +; DARWIN: .globl _G8 ; DARWIN: _G8: -; LINUX: .section .rodata.str2.2,"aMS",@progbits,2 -; LINUX: .globl G8 +; LINUX: .section .rodata.str2.2,"aMS",@progbits,2 +; LINUX: .globl G8 ; LINUX:G8: @G9 = unnamed_addr constant [4 x i32] [ i32 1, i32 2, i32 3, i32 0 ] -; DARWIN: .globl _G9 +; DARWIN: .globl _G9 ; DARWIN: _G9: -; LINUX: .section .rodata.str4.4,"aMS",@progbits,4 -; LINUX: .globl G9 +; LINUX: .section .rodata.str4.4,"aMS",@progbits,4 +; LINUX: .globl G9 ; LINUX:G9 @G10 = weak global [100 x i32] zeroinitializer, align 32 ; <[100 x i32]*> [#uses=0] -; DARWIN: .section __DATA,__datacoal_nt,coalesced +; DARWIN: .section __DATA,__datacoal_nt,coalesced ; DARWIN: .globl _G10 -; DARWIN: .weak_definition _G10 -; DARWIN: .align 5 +; DARWIN: .weak_definition _G10 +; DARWIN: .align 5 ; DARWIN: _G10: -; DARWIN: .space 400 +; DARWIN: .space 400 -; LINUX: .bss -; LINUX: .weak G10 -; LINUX: .align 32 +; LINUX: .bss +; LINUX: .weak G10 +; LINUX: .align 32 ; LINUX: G10: -; LINUX: .zero 400 +; LINUX: .zero 400 diff --git a/test/DebugInfo/X86/cu-ranges.ll b/test/DebugInfo/X86/cu-ranges.ll index e6dc17e2d50..405a498155f 100644 --- a/test/DebugInfo/X86/cu-ranges.ll +++ b/test/DebugInfo/X86/cu-ranges.ll @@ -1,4 +1,4 @@ -; RUN: llc -split-dwarf=Enable -O0 %s -ffunction-sections -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o %t +; RUN: llc -split-dwarf=Enable -O0 %s -function-sections -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o %t ; RUN: llvm-dwarfdump -debug-dump=all %t | FileCheck --check-prefix=FUNCTION-SECTIONS %s ; RUN: llvm-readobj --relocations %t | FileCheck --check-prefix=FUNCTION-SECTIONS-RELOCS %s