[LLVMdev] Why do X86_32TargetMachine and X86_64TargetMachine classes exist?

David Woodhouse dwmw2 at infradead.org
Mon Jan 6 07:18:39 PST 2014


These two subclasses of X86TargetMachine are basically identical.

The *only* thing that's different is the constructor. And that *only*
differs in the is64Bit argument that it passes to the X86TargetMachine
constructor. Replacing the hard-coded 'true' or 'false' with
'Triple(TT).getArch()==Triple::x86_64' makes them *actually* identical.

Can we just ditch the subclasses, move the fields and methods that they
share into the X86TargetMachine class, and use that instead? Or am I
missing something?

In the patch I'm about to post to llvm-commits, I *stop* using the
X86_64TargetMachine subclass entirely, and use X86_32TargetMachine for
the 64-bit target. And the 16-bit target too. And nothing seems to have
broken AFAICT...

--- a/lib/Target/X86/X86TargetMachine.cpp
+++ b/lib/Target/X86/X86TargetMachine.cpp
@@ -24,8 +24,9 @@ using namespace llvm;
 
 extern "C" void LLVMInitializeX86Target() {
   // Register the target.
+  RegisterTargetMachine<X86_32TargetMachine> W(TheX86_16Target);
   RegisterTargetMachine<X86_32TargetMachine> X(TheX86_32Target);
-  RegisterTargetMachine<X86_64TargetMachine> Y(TheX86_64Target);
+  RegisterTargetMachine<X86_32TargetMachine> Y(TheX86_64Target);
 }
@@ -74,7 +75,7 @@ X86_32TargetMachine::X86_32TargetMachine(const Target &T, Stri
                                          const TargetOptions &Options,
                                          Reloc::Model RM, CodeModel::Model CM,
                                          CodeGenOpt::Level OL)
-  : X86TargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, false),
+  : X86TargetMachine(T, TT, CPU, FS, Options, RM, CM, OL, Triple(TT).getArch())
     DL(computeDataLayout(*getSubtargetImpl())),
     InstrInfo(*this),


-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse at intel.com                              Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 5745 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140106/ab26c06b/attachment.bin>


More information about the llvm-dev mailing list