[cfe-commits] r65118 - in /cfe/trunk/tools/ccc: ccclib/Arguments.py ccclib/ToolChain.py ccclib/Tools.py test/ccc/x86-target-features.c

Daniel Dunbar daniel at zuster.org
Thu Feb 19 23:35:04 PST 2009


Author: ddunbar
Date: Fri Feb 20 01:35:04 2009
New Revision: 65118

URL: http://llvm.org/viewvc/llvm-project?rev=65118&view=rev
Log:
ccc: Basic translation of gcc subtarget feature options to LLVM
options (i.e., -mno-red-zone, -msoft-float, -mno-sse, etc.)
 - Also, make sure unwind tables default to on Darwin/x86_64.
 - PR3604.

Added:
    cfe/trunk/tools/ccc/test/ccc/x86-target-features.c
Modified:
    cfe/trunk/tools/ccc/ccclib/Arguments.py
    cfe/trunk/tools/ccc/ccclib/ToolChain.py
    cfe/trunk/tools/ccc/ccclib/Tools.py

Modified: cfe/trunk/tools/ccc/ccclib/Arguments.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/ccc/ccclib/Arguments.py?rev=65118&r1=65117&r2=65118&view=diff

==============================================================================
--- cfe/trunk/tools/ccc/ccclib/Arguments.py (original)
+++ cfe/trunk/tools/ccc/ccclib/Arguments.py Fri Feb 20 01:35:04 2009
@@ -846,6 +846,7 @@
         self.f_timeReportOption = self.addOption(FlagOption('-ftime-report', self.Clang_fGroup))
         self.f_traditionalOption = self.addOption(FlagOption('-ftraditional', self.fGroup))
         self.f_unwindTablesOption = self.addOption(FlagOption('-funwind-tables', self.fGroup))
+        self.f_noUnwindTablesOption = self.addOption(FlagOption('-fno-unwind-tables', self.fGroup))
         self.f_writableStringsOption = self.addOption(FlagOption('-fwritable-strings', self.Clang_fGroup))
         self.f_zeroInitializedInBssOption = self.addOption(FlagOption('-fzero-initialized-in-bss', self.fGroup))
         self.fOption = self.addOption(JoinedOption('-f', self.fGroup))
@@ -867,6 +868,31 @@
         self.m_noPascalStringsOption = self.addOption(FlagOption('-mno-pascal-strings', self.mGroup))
         self.m_tuneOption = self.addOption(JoinedOption('-mtune=', self.mGroup))
 
+        self.m_mmxOption = self.addOption(FlagOption('-mmmx', self.mGroup))
+        self.m_noMmxOption = self.addOption(FlagOption('-mno-mmx', self.mGroup))
+        self.m_sseOption = self.addOption(FlagOption('-msse', self.mGroup))
+        self.m_noSseOption = self.addOption(FlagOption('-mno-sse', self.mGroup))
+        self.m_sse2Option = self.addOption(FlagOption('-msse2', self.mGroup))
+        self.m_noSse2Option = self.addOption(FlagOption('-mno-sse2', self.mGroup))
+        self.m_sse3Option = self.addOption(FlagOption('-msse3', self.mGroup))
+        self.m_noSse3Option = self.addOption(FlagOption('-mno-sse3', self.mGroup))
+        self.m_ssse3Option = self.addOption(FlagOption('-mssse3', self.mGroup))
+        self.m_noSsse3Option = self.addOption(FlagOption('-mno-ssse3', self.mGroup))
+        self.m_sse41Option = self.addOption(FlagOption('-msse41', self.mGroup))
+        self.m_noSse41Option = self.addOption(FlagOption('-mno-sse41', self.mGroup))
+        self.m_sse42Option = self.addOption(FlagOption('-msse42', self.mGroup))
+        self.m_noSse42Option = self.addOption(FlagOption('-mno-sse42', self.mGroup))
+        self.m_sse4aOption = self.addOption(FlagOption('-msse4a', self.mGroup))
+        self.m_noSse4aOption = self.addOption(FlagOption('-mno-sse4a', self.mGroup))
+        self.m_3dnowOption = self.addOption(FlagOption('-m3dnow', self.mGroup))
+        self.m_no3dnowOption = self.addOption(FlagOption('-mno-3dnow', self.mGroup))
+        self.m_3dnowaOption = self.addOption(FlagOption('-m3dnowa', self.mGroup))
+        self.m_no3dnowaOption = self.addOption(FlagOption('-mno-3dnowa', self.mGroup))
+        self.m_redZoneOption = self.addOption(FlagOption('-mred-zone', self.mGroup))
+        self.m_noRedZoneOption = self.addOption(FlagOption('-mno-red-zone', self.mGroup))
+        self.m_softFloatOption = self.addOption(FlagOption('-msoft-float', self.mGroup))
+        self.m_noSoftFloatOption = self.addOption(FlagOption('-mno-soft-float', self.mGroup))
+
         # Ugh. Need to disambiguate our naming convetion. -m x goes to
         # the linker sometimes, wheres -mxxxx is used for a variety of
         # other things.        

Modified: cfe/trunk/tools/ccc/ccclib/ToolChain.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/ccc/ccclib/ToolChain.py?rev=65118&r1=65117&r2=65118&view=diff

==============================================================================
--- cfe/trunk/tools/ccc/ccclib/ToolChain.py (original)
+++ cfe/trunk/tools/ccc/ccclib/ToolChain.py Fri Feb 20 01:35:04 2009
@@ -86,6 +86,12 @@
     def isMathErrnoDefault(self):
         return True
 
+    def isUnwindTablesDefault(self):
+        # FIXME: Target hook.
+        if self.archName == 'x86_64':
+            return True
+        return False
+
     def getRelocationModel(self, picEnabled, picDisabled):
         if picEnabled:
             return 'pic'

Modified: cfe/trunk/tools/ccc/ccclib/Tools.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/ccc/ccclib/Tools.py?rev=65118&r1=65117&r2=65118&view=diff

==============================================================================
--- cfe/trunk/tools/ccc/ccclib/Tools.py (original)
+++ cfe/trunk/tools/ccc/ccclib/Tools.py Fri Feb 20 01:35:04 2009
@@ -272,8 +272,67 @@
             if arglist.getLastArg(arglist.parser.f_debugPassArgumentsOption):
                 cmd_args.append('--debug-pass=Arguments')
             # FIXME: set --inline-threshhold=50 if (optimize_size || optimize < 3)
-            if arglist.getLastArg(arglist.parser.f_unwindTablesOption):
-                cmd_args.append('--unwind-tables')
+            cmd_args.append('--unwind-tables=%d' %
+                            arglist.hasFFlag(arglist.parser.f_unwindTablesOption,
+                                             arglist.parser.f_noUnwindTablesOption,
+                                             self.toolChain.isUnwindTablesDefault()))
+            if not arglist.hasFFlag(arglist.parser.m_redZoneOption,
+                                      arglist.parser.m_noRedZoneOption,
+                                      True):
+                cmd_args.append('--disable-red-zone')
+            if arglist.hasFFlag(arglist.parser.m_softFloatOption,
+                                arglist.parser.m_noSoftFloatOption,
+                                False):
+                cmd_args.append('--soft-float')
+                
+            # FIXME: Need target hooks.
+            if self.toolChain.driver.getHostSystemName() == 'darwin':
+                if self.toolChain.archName == 'x86_64':
+                    cmd_args.append('--mcpu=core2')
+                elif self.toolChain.archName == 'i386':
+                    cmd_args.append('--mcpu=yonah')
+            else:
+                pass
+            
+            # FIXME: Ignores ordering
+            attrs = []
+            for pos,neg,flag in [(arglist.parser.m_mmxOption,
+                                  arglist.parser.m_noMmxOption,
+                                  'mmx'),
+                                 (arglist.parser.m_sseOption,
+                                  arglist.parser.m_noSseOption,
+                                  'sse'),
+                                 (arglist.parser.m_sse2Option,
+                                  arglist.parser.m_noSse2Option,
+                                  'sse2'),
+                                 (arglist.parser.m_sse3Option,
+                                  arglist.parser.m_noSse3Option,
+                                  'sse3'),
+                                 (arglist.parser.m_ssse3Option,
+                                  arglist.parser.m_noSsse3Option,
+                                  'ssse3'),
+                                 (arglist.parser.m_sse41Option,
+                                  arglist.parser.m_noSse41Option,
+                                  'sse41'),
+                                 (arglist.parser.m_sse42Option,
+                                  arglist.parser.m_noSse42Option,
+                                  'sse42'),
+                                 (arglist.parser.m_sse4aOption,
+                                  arglist.parser.m_noSse4aOption,
+                                  'sse4a'),
+                                 (arglist.parser.m_3dnowOption,
+                                  arglist.parser.m_no3dnowOption,
+                                  '3dnow'),
+                                 (arglist.parser.m_3dnowaOption,
+                                  arglist.parser.m_no3dnowaOption,
+                                  '3dnowa'),
+                                 ]:
+                if arglist.getLastArg(pos):
+                    attrs.append('+' + flag)
+                elif arglist.getLastArg(neg):
+                    attrs.append('-' + flag)
+            if attrs:
+                cmd_args.append('--mattrs=%s' % ','.join(attrs))
 
             if arglist.hasFFlag(arglist.parser.f_mathErrnoOption,
                                 arglist.parser.f_noMathErrnoOption,

Added: cfe/trunk/tools/ccc/test/ccc/x86-target-features.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/ccc/test/ccc/x86-target-features.c?rev=65118&view=auto

==============================================================================
--- cfe/trunk/tools/ccc/test/ccc/x86-target-features.c (added)
+++ cfe/trunk/tools/ccc/test/ccc/x86-target-features.c Fri Feb 20 01:35:04 2009
@@ -0,0 +1,4 @@
+// RUN: xcc -ccc-host-machine i386 -### -S %s -mno-red-zone -mno-sse -msse4a -msoft-float &> %t &&
+// RUN: grep '"--mattrs=-sse,+sse4a"' %t &&
+// RUN: grep '"--disable-red-zone"' %t &&
+// RUN: grep '"--soft-float"' %t





More information about the cfe-commits mailing list