Преглед изворни кода

Support for generating ELF objects on Windows.

This adds 'elf' as a recognized target triple environment value and overrides the default generated object format on Windows platforms if that value is present.  This patch also enables MCJIT tests on Windows using the new environment value.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165030 91177308-0d34-0410-b5e6-96231b3b80d8
Andrew Kaylor пре 13 година
родитељ
комит
7bbd6e366b
57 измењених фајлова са 84 додато и 59 уклоњено
  1. 2 1
      include/llvm/ADT/Triple.h
  2. 8 1
      lib/ExecutionEngine/TargetSelect.cpp
  3. 1 0
      lib/MC/MCObjectFileInfo.cpp
  4. 2 0
      lib/Support/Triple.cpp
  5. 2 2
      lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
  6. 5 1
      lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
  7. 8 5
      lib/Target/X86/X86Subtarget.h
  8. 1 1
      test/ExecutionEngine/MCJIT/2002-12-16-ArgTest.ll
  9. 1 1
      test/ExecutionEngine/MCJIT/2003-01-04-ArgumentBug.ll
  10. 1 1
      test/ExecutionEngine/MCJIT/2003-01-04-LoopTest.ll
  11. 1 1
      test/ExecutionEngine/MCJIT/2003-01-04-PhiTest.ll
  12. 1 1
      test/ExecutionEngine/MCJIT/2003-01-09-SARTest.ll
  13. 1 1
      test/ExecutionEngine/MCJIT/2003-01-10-FUCOM.ll
  14. 1 1
      test/ExecutionEngine/MCJIT/2003-01-15-AlignmentTest.ll
  15. 1 1
      test/ExecutionEngine/MCJIT/2003-05-06-LivenessClobber.ll
  16. 1 1
      test/ExecutionEngine/MCJIT/2003-05-07-ArgumentTest.ll
  17. 1 1
      test/ExecutionEngine/MCJIT/2003-05-11-PHIRegAllocBug.ll
  18. 1 1
      test/ExecutionEngine/MCJIT/2003-06-04-bzip2-bug.ll
  19. 1 1
      test/ExecutionEngine/MCJIT/2003-06-05-PHIBug.ll
  20. 1 1
      test/ExecutionEngine/MCJIT/2003-08-15-AllocaAssertion.ll
  21. 1 1
      test/ExecutionEngine/MCJIT/2003-08-21-EnvironmentTest.ll
  22. 1 1
      test/ExecutionEngine/MCJIT/2003-08-23-RegisterAllocatePhysReg.ll
  23. 1 1
      test/ExecutionEngine/MCJIT/2003-10-18-PHINode-ConstantExpr-CondCode-Failure.ll
  24. 1 1
      test/ExecutionEngine/MCJIT/2005-12-02-TailCallBug.ll
  25. 1 1
      test/ExecutionEngine/MCJIT/2007-12-10-APIntLoadStore.ll
  26. 1 1
      test/ExecutionEngine/MCJIT/2008-06-05-APInt-OverAShr.ll
  27. 1 1
      test/ExecutionEngine/MCJIT/2010-01-15-UndefValue.ll
  28. 1 1
      test/ExecutionEngine/MCJIT/fpbitcast.ll
  29. 1 1
      test/ExecutionEngine/MCJIT/hello.ll
  30. 1 1
      test/ExecutionEngine/MCJIT/hello2.ll
  31. 1 1
      test/ExecutionEngine/MCJIT/lit.local.cfg
  32. 1 1
      test/ExecutionEngine/MCJIT/pr13727.ll
  33. 1 1
      test/ExecutionEngine/MCJIT/simplesttest.ll
  34. 1 1
      test/ExecutionEngine/MCJIT/simpletest.ll
  35. 1 1
      test/ExecutionEngine/MCJIT/stubs.ll
  36. 1 1
      test/ExecutionEngine/MCJIT/test-arith.ll
  37. 1 1
      test/ExecutionEngine/MCJIT/test-branch.ll
  38. 1 1
      test/ExecutionEngine/MCJIT/test-call-no-external-funcs.ll
  39. 1 1
      test/ExecutionEngine/MCJIT/test-call.ll
  40. 1 1
      test/ExecutionEngine/MCJIT/test-cast.ll
  41. 1 1
      test/ExecutionEngine/MCJIT/test-common-symbols.ll
  42. 1 1
      test/ExecutionEngine/MCJIT/test-constantexpr.ll
  43. 1 1
      test/ExecutionEngine/MCJIT/test-fp-no-external-funcs.ll
  44. 1 1
      test/ExecutionEngine/MCJIT/test-fp.ll
  45. 1 1
      test/ExecutionEngine/MCJIT/test-global-init-nonzero.ll
  46. 1 1
      test/ExecutionEngine/MCJIT/test-global.ll
  47. 1 1
      test/ExecutionEngine/MCJIT/test-loadstore.ll
  48. 1 1
      test/ExecutionEngine/MCJIT/test-local.ll
  49. 1 1
      test/ExecutionEngine/MCJIT/test-logical.ll
  50. 1 1
      test/ExecutionEngine/MCJIT/test-loop.ll
  51. 1 1
      test/ExecutionEngine/MCJIT/test-phi.ll
  52. 1 1
      test/ExecutionEngine/MCJIT/test-ret.ll
  53. 1 1
      test/ExecutionEngine/MCJIT/test-return.ll
  54. 1 1
      test/ExecutionEngine/MCJIT/test-setcond-fp.ll
  55. 1 1
      test/ExecutionEngine/MCJIT/test-setcond-int.ll
  56. 1 1
      test/ExecutionEngine/MCJIT/test-shift.ll
  57. 7 0
      test/lit.cfg

+ 2 - 1
include/llvm/ADT/Triple.h

@@ -111,7 +111,8 @@ public:
     GNUEABIHF,
     GNUEABIHF,
     EABI,
     EABI,
     MachO,
     MachO,
-    Android
+    Android,
+    ELF
   };
   };
 
 
 private:
 private:

+ 8 - 1
lib/ExecutionEngine/TargetSelect.cpp

@@ -26,7 +26,14 @@
 using namespace llvm;
 using namespace llvm;
 
 
 TargetMachine *EngineBuilder::selectTarget() {
 TargetMachine *EngineBuilder::selectTarget() {
-  Triple TT(LLVM_HOSTTRIPLE);
+  Triple TT;
+
+  // MCJIT can generate code for remote targets, but the old JIT and Interpreter
+  // must use the host architecture.
+  if (UseMCJIT && WhichEngine != EngineKind::Interpreter && M)
+    TT.setTriple(M->getTargetTriple());
+  else
+    TT.setTriple(LLVM_HOSTTRIPLE);
   return selectTarget(TT, MArch, MCPU, MAttrs);
   return selectTarget(TT, MArch, MCPU, MAttrs);
 }
 }
 
 

+ 1 - 0
lib/MC/MCObjectFileInfo.cpp

@@ -565,6 +565,7 @@ void MCObjectFileInfo::InitMCObjectFileInfo(StringRef TT, Reloc::Model relocm,
     Env = IsMachO;
     Env = IsMachO;
     InitMachOMCObjectFileInfo(T);
     InitMachOMCObjectFileInfo(T);
   } else if ((Arch == Triple::x86 || Arch == Triple::x86_64) &&
   } else if ((Arch == Triple::x86 || Arch == Triple::x86_64) &&
+             (T.getEnvironment() != Triple::ELF) &&
              (T.getOS() == Triple::MinGW32 || T.getOS() == Triple::Cygwin ||
              (T.getOS() == Triple::MinGW32 || T.getOS() == Triple::Cygwin ||
               T.getOS() == Triple::Win32)) {
               T.getOS() == Triple::Win32)) {
     Env = IsCOFF;
     Env = IsCOFF;

+ 2 - 0
lib/Support/Triple.cpp

@@ -142,6 +142,7 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
   case EABI: return "eabi";
   case EABI: return "eabi";
   case MachO: return "macho";
   case MachO: return "macho";
   case Android: return "android";
   case Android: return "android";
+  case ELF: return "elf";
   }
   }
 
 
   llvm_unreachable("Invalid EnvironmentType!");
   llvm_unreachable("Invalid EnvironmentType!");
@@ -314,6 +315,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
     .StartsWith("gnu", Triple::GNU)
     .StartsWith("gnu", Triple::GNU)
     .StartsWith("macho", Triple::MachO)
     .StartsWith("macho", Triple::MachO)
     .StartsWith("android", Triple::Android)
     .StartsWith("android", Triple::Android)
+    .StartsWith("elf", Triple::ELF)
     .Default(Triple::UnknownEnvironment);
     .Default(Triple::UnknownEnvironment);
 }
 }
 
 

+ 2 - 2
lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp

@@ -453,7 +453,7 @@ MCAsmBackend *llvm::createX86_32AsmBackend(const Target &T, StringRef TT, String
   if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO)
   if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO)
     return new DarwinX86_32AsmBackend(T, CPU);
     return new DarwinX86_32AsmBackend(T, CPU);
 
 
-  if (TheTriple.isOSWindows())
+  if (TheTriple.isOSWindows() && TheTriple.getEnvironment() != Triple::ELF)
     return new WindowsX86AsmBackend(T, false, CPU);
     return new WindowsX86AsmBackend(T, false, CPU);
 
 
   uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS());
   uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS());
@@ -466,7 +466,7 @@ MCAsmBackend *llvm::createX86_64AsmBackend(const Target &T, StringRef TT, String
   if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO)
   if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO)
     return new DarwinX86_64AsmBackend(T, CPU);
     return new DarwinX86_64AsmBackend(T, CPU);
 
 
-  if (TheTriple.isOSWindows())
+  if (TheTriple.isOSWindows() && TheTriple.getEnvironment() != Triple::ELF)
     return new WindowsX86AsmBackend(T, true, CPU);
     return new WindowsX86AsmBackend(T, true, CPU);
 
 
   uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS());
   uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS());

+ 5 - 1
lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp

@@ -384,11 +384,15 @@ static MCAsmInfo *createX86MCAsmInfo(const Target &T, StringRef TT) {
       MAI = new X86_64MCAsmInfoDarwin(TheTriple);
       MAI = new X86_64MCAsmInfoDarwin(TheTriple);
     else
     else
       MAI = new X86MCAsmInfoDarwin(TheTriple);
       MAI = new X86MCAsmInfoDarwin(TheTriple);
+  } else if (TheTriple.getEnvironment() == Triple::ELF) {
+    // Force the use of an ELF container.
+    MAI = new X86ELFMCAsmInfo(TheTriple);
   } else if (TheTriple.getOS() == Triple::Win32) {
   } else if (TheTriple.getOS() == Triple::Win32) {
     MAI = new X86MCAsmInfoMicrosoft(TheTriple);
     MAI = new X86MCAsmInfoMicrosoft(TheTriple);
   } else if (TheTriple.getOS() == Triple::MinGW32 || TheTriple.getOS() == Triple::Cygwin) {
   } else if (TheTriple.getOS() == Triple::MinGW32 || TheTriple.getOS() == Triple::Cygwin) {
     MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
     MAI = new X86MCAsmInfoGNUCOFF(TheTriple);
   } else {
   } else {
+    // The default is ELF.
     MAI = new X86ELFMCAsmInfo(TheTriple);
     MAI = new X86ELFMCAsmInfo(TheTriple);
   }
   }
 
 
@@ -470,7 +474,7 @@ static MCStreamer *createMCStreamer(const Target &T, StringRef TT,
   if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO)
   if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO)
     return createMachOStreamer(Ctx, MAB, _OS, _Emitter, RelaxAll);
     return createMachOStreamer(Ctx, MAB, _OS, _Emitter, RelaxAll);
 
 
-  if (TheTriple.isOSWindows())
+  if (TheTriple.isOSWindows() && TheTriple.getEnvironment() != Triple::ELF)
     return createWinCOFFStreamer(Ctx, MAB, *_Emitter, _OS, RelaxAll);
     return createWinCOFFStreamer(Ctx, MAB, *_Emitter, _OS, RelaxAll);
 
 
   return createELFStreamer(Ctx, MAB, _OS, _Emitter, RelaxAll, NoExecStack);
   return createELFStreamer(Ctx, MAB, _OS, _Emitter, RelaxAll, NoExecStack);

+ 8 - 5
lib/Target/X86/X86Subtarget.h

@@ -237,10 +237,10 @@ public:
   bool isTargetSolaris() const {
   bool isTargetSolaris() const {
     return TargetTriple.getOS() == Triple::Solaris;
     return TargetTriple.getOS() == Triple::Solaris;
   }
   }
-
-  // ELF is a reasonably sane default and the only other X86 targets we
-  // support are Darwin and Windows. Just use "not those".
-  bool isTargetELF() const { return TargetTriple.isOSBinFormatELF(); }
+  bool isTargetELF() const {
+    return (TargetTriple.getEnvironment() == Triple::ELF ||
+            TargetTriple.isOSBinFormatELF());
+  }
   bool isTargetLinux() const { return TargetTriple.getOS() == Triple::Linux; }
   bool isTargetLinux() const { return TargetTriple.getOS() == Triple::Linux; }
   bool isTargetNaCl() const {
   bool isTargetNaCl() const {
     return TargetTriple.getOS() == Triple::NativeClient;
     return TargetTriple.getOS() == Triple::NativeClient;
@@ -251,7 +251,10 @@ public:
   bool isTargetMingw() const { return TargetTriple.getOS() == Triple::MinGW32; }
   bool isTargetMingw() const { return TargetTriple.getOS() == Triple::MinGW32; }
   bool isTargetCygwin() const { return TargetTriple.getOS() == Triple::Cygwin; }
   bool isTargetCygwin() const { return TargetTriple.getOS() == Triple::Cygwin; }
   bool isTargetCygMing() const { return TargetTriple.isOSCygMing(); }
   bool isTargetCygMing() const { return TargetTriple.isOSCygMing(); }
-  bool isTargetCOFF() const { return TargetTriple.isOSBinFormatCOFF(); }
+  bool isTargetCOFF() const {
+    return (TargetTriple.getEnvironment() != Triple::ELF &&
+            TargetTriple.isOSBinFormatCOFF());
+  }
   bool isTargetEnvMacho() const { return TargetTriple.isEnvironmentMachO(); }
   bool isTargetEnvMacho() const { return TargetTriple.isEnvironmentMachO(); }
 
 
   bool isTargetWin64() const {
   bool isTargetWin64() const {

+ 1 - 1
test/ExecutionEngine/MCJIT/2002-12-16-ArgTest.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 @.LC0 = internal global [10 x i8] c"argc: %d\0A\00"		; <[10 x i8]*> [#uses=1]
 @.LC0 = internal global [10 x i8] c"argc: %d\0A\00"		; <[10 x i8]*> [#uses=1]
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-01-04-ArgumentBug.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @foo(i32 %X, i32 %Y, double %A) {
 define i32 @foo(i32 %X, i32 %Y, double %A) {
 	%cond212 = fcmp une double %A, 1.000000e+00		; <i1> [#uses=1]
 	%cond212 = fcmp une double %A, 1.000000e+00		; <i1> [#uses=1]

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-01-04-LoopTest.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
 	call i32 @mylog( i32 4 )		; <i32>:1 [#uses=0]
 	call i32 @mylog( i32 4 )		; <i32>:1 [#uses=0]

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-01-04-PhiTest.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
 ; <label>:0
 ; <label>:0

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-01-09-SARTest.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ; We were accidentally inverting the signedness of right shifts.  Whoops.
 ; We were accidentally inverting the signedness of right shifts.  Whoops.
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-01-10-FUCOM.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
 	%X = fadd double 0.000000e+00, 1.000000e+00		; <double> [#uses=1]
 	%X = fadd double 0.000000e+00, 1.000000e+00		; <double> [#uses=1]

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-01-15-AlignmentTest.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @bar(i8* %X) {
 define i32 @bar(i8* %X) {
         ; pointer should be 4 byte aligned!
         ; pointer should be 4 byte aligned!

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-05-06-LivenessClobber.ll

@@ -1,6 +1,6 @@
 ; This testcase should return with an exit code of 1.
 ; This testcase should return with an exit code of 1.
 ;
 ;
-; RUN: not %lli -use-mcjit %s
+; RUN: not %lli -mtriple=%mcjit_triple -use-mcjit %s
 
 
 @test = global i64 0		; <i64*> [#uses=1]
 @test = global i64 0		; <i64*> [#uses=1]
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-05-07-ArgumentTest.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s test
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s test
 
 
 declare i32 @puts(i8*)
 declare i32 @puts(i8*)
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-05-11-PHIRegAllocBug.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 target datalayout = "e-p:32:32"
 target datalayout = "e-p:32:32"
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-06-04-bzip2-bug.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ; Testcase distilled from 256.bzip2.
 ; Testcase distilled from 256.bzip2.
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-06-05-PHIBug.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ; Testcase distilled from 256.bzip2.
 ; Testcase distilled from 256.bzip2.
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-08-15-AllocaAssertion.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ; This testcase failed to work because two variable sized allocas confused the
 ; This testcase failed to work because two variable sized allocas confused the
 ; local register allocator.
 ; local register allocator.

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-08-21-EnvironmentTest.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ;
 ;
 ; Regression Test: EnvironmentTest.ll
 ; Regression Test: EnvironmentTest.ll

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-08-23-RegisterAllocatePhysReg.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ; This testcase exposes a bug in the local register allocator where it runs out
 ; This testcase exposes a bug in the local register allocator where it runs out
 ; of registers (due to too many overlapping live ranges), but then attempts to
 ; of registers (due to too many overlapping live ranges), but then attempts to

+ 1 - 1
test/ExecutionEngine/MCJIT/2003-10-18-PHINode-ConstantExpr-CondCode-Failure.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 @A = global i32 0		; <i32*> [#uses=1]
 @A = global i32 0		; <i32*> [#uses=1]
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/2005-12-02-TailCallBug.ll

@@ -1,5 +1,5 @@
 ; PR672
 ; PR672
-; RUN: %lli -use-mcjit %s
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s
 ; XFAIL: mcjit-ia32
 ; XFAIL: mcjit-ia32
 
 
 define i32 @main() {
 define i32 @main() {

+ 1 - 1
test/ExecutionEngine/MCJIT/2007-12-10-APIntLoadStore.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit -force-interpreter %s
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit -force-interpreter %s
 ; PR1836
 ; PR1836
 
 
 define i32 @main() {
 define i32 @main() {

+ 1 - 1
test/ExecutionEngine/MCJIT/2008-06-05-APInt-OverAShr.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit -force-interpreter=true %s | grep 1
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit -force-interpreter=true %s | grep 1
 
 
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
 target triple = "i686-pc-linux-gnu"
 target triple = "i686-pc-linux-gnu"

+ 1 - 1
test/ExecutionEngine/MCJIT/2010-01-15-UndefValue.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit -force-interpreter=true %s
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit -force-interpreter=true %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
        %a = add i32 0, undef
        %a = add i32 0, undef

+ 1 - 1
test/ExecutionEngine/MCJIT/fpbitcast.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit -force-interpreter=true %s | grep 40091eb8
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit -force-interpreter=true %s | grep 40091eb8
 ;
 ;
 define i32 @test(double %x) {
 define i32 @test(double %x) {
 entry:
 entry:

+ 1 - 1
test/ExecutionEngine/MCJIT/hello.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 @.LC0 = internal global [12 x i8] c"Hello World\00"		; <[12 x i8]*> [#uses=1]
 @.LC0 = internal global [12 x i8] c"Hello World\00"		; <[12 x i8]*> [#uses=1]
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/hello2.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 @X = global i32 7		; <i32*> [#uses=0]
 @X = global i32 7		; <i32*> [#uses=0]
 @msg = internal global [13 x i8] c"Hello World\0A\00"		; <[13 x i8]*> [#uses=1]
 @msg = internal global [13 x i8] c"Hello World\0A\00"		; <[13 x i8]*> [#uses=1]

+ 1 - 1
test/ExecutionEngine/MCJIT/lit.local.cfg

@@ -16,5 +16,5 @@ else:
 if root.host_arch not in ['x86', 'x86_64', 'ARM', 'Mips']:
 if root.host_arch not in ['x86', 'x86_64', 'ARM', 'Mips']:
     config.unsupported = True
     config.unsupported = True
 
 
-if root.host_os in ['Win32', 'Cygwin', 'MingW', 'Windows', 'Darwin']:
+if root.host_os in ['Cygwin', 'MingW', 'Darwin']:
     config.unsupported = True
     config.unsupported = True

+ 1 - 1
test/ExecutionEngine/MCJIT/pr13727.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit -O0 -disable-lazy-compilation=false %s
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit -O0 -disable-lazy-compilation=false %s
 
 
 ; The intention of this test is to verify that symbols mapped to COMMON in ELF
 ; The intention of this test is to verify that symbols mapped to COMMON in ELF
 ; work as expected.
 ; work as expected.

+ 1 - 1
test/ExecutionEngine/MCJIT/simplesttest.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
 	ret i32 0
 	ret i32 0

+ 1 - 1
test/ExecutionEngine/MCJIT/simpletest.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @bar() {
 define i32 @bar() {
 	ret i32 0
 	ret i32 0

+ 1 - 1
test/ExecutionEngine/MCJIT/stubs.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit -disable-lazy-compilation=false %s
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit -disable-lazy-compilation=false %s
 
 
 define i32 @main() nounwind {
 define i32 @main() nounwind {
 entry:
 entry:

+ 1 - 1
test/ExecutionEngine/MCJIT/test-arith.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
 	%A = add i8 0, 12		; <i8> [#uses=1]
 	%A = add i8 0, 12		; <i8> [#uses=1]

+ 1 - 1
test/ExecutionEngine/MCJIT/test-branch.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ; test unconditional branch
 ; test unconditional branch
 define i32 @main() {
 define i32 @main() {

+ 1 - 1
test/ExecutionEngine/MCJIT/test-call-no-external-funcs.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @_Z14func_exit_codev() nounwind uwtable {
 define i32 @_Z14func_exit_codev() nounwind uwtable {
 entry:
 entry:

+ 1 - 1
test/ExecutionEngine/MCJIT/test-call.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 declare void @exit(i32)
 declare void @exit(i32)
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/test-cast.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @foo() {
 define i32 @foo() {
 	ret i32 0
 	ret i32 0

+ 1 - 1
test/ExecutionEngine/MCJIT/test-common-symbols.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit -O0 -disable-lazy-compilation=false %s
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit -O0 -disable-lazy-compilation=false %s
 
 
 ; The intention of this test is to verify that symbols mapped to COMMON in ELF
 ; The intention of this test is to verify that symbols mapped to COMMON in ELF
 ; work as expected.
 ; work as expected.

+ 1 - 1
test/ExecutionEngine/MCJIT/test-constantexpr.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ; This tests to make sure that we can evaluate weird constant expressions
 ; This tests to make sure that we can evaluate weird constant expressions
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/test-fp-no-external-funcs.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define double @test(double* %DP, double %Arg) {
 define double @test(double* %DP, double %Arg) {
 	%D = load double* %DP		; <double> [#uses=1]
 	%D = load double* %DP		; <double> [#uses=1]

+ 1 - 1
test/ExecutionEngine/MCJIT/test-fp.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define double @test(double* %DP, double %Arg) {
 define double @test(double* %DP, double %Arg) {
 	%D = load double* %DP		; <double> [#uses=1]
 	%D = load double* %DP		; <double> [#uses=1]

+ 1 - 1
test/ExecutionEngine/MCJIT/test-global-init-nonzero.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 @count = global i32 1, align 4
 @count = global i32 1, align 4
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/test-global.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 @count = global i32 0, align 4
 @count = global i32 0, align 4
 
 

+ 1 - 1
test/ExecutionEngine/MCJIT/test-loadstore.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define void @test(i8* %P, i16* %P.upgrd.1, i32* %P.upgrd.2, i64* %P.upgrd.3) {
 define void @test(i8* %P, i16* %P.upgrd.1, i32* %P.upgrd.2, i64* %P.upgrd.3) {
 	%V = load i8* %P		; <i8> [#uses=1]
 	%V = load i8* %P		; <i8> [#uses=1]

+ 1 - 1
test/ExecutionEngine/MCJIT/test-local.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() nounwind uwtable {
 define i32 @main() nounwind uwtable {
 entry:
 entry:

+ 1 - 1
test/ExecutionEngine/MCJIT/test-logical.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
 	%A = and i8 4, 8		; <i8> [#uses=2]
 	%A = and i8 4, 8		; <i8> [#uses=2]

+ 1 - 1
test/ExecutionEngine/MCJIT/test-loop.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
 ; <label>:0
 ; <label>:0

+ 1 - 1
test/ExecutionEngine/MCJIT/test-phi.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ; test phi node
 ; test phi node
 @Y = global i32 6		; <i32*> [#uses=1]
 @Y = global i32 6		; <i32*> [#uses=1]

+ 1 - 1
test/ExecutionEngine/MCJIT/test-ret.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 ; test return instructions
 ; test return instructions
 define void @test1() {
 define void @test1() {

+ 1 - 1
test/ExecutionEngine/MCJIT/test-return.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() nounwind uwtable {
 define i32 @main() nounwind uwtable {
 entry:
 entry:

+ 1 - 1
test/ExecutionEngine/MCJIT/test-setcond-fp.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 
 
 define i32 @main() {
 define i32 @main() {

+ 1 - 1
test/ExecutionEngine/MCJIT/test-setcond-int.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
 	%int1 = add i32 0, 0		; <i32> [#uses=6]
 	%int1 = add i32 0, 0		; <i32> [#uses=6]

+ 1 - 1
test/ExecutionEngine/MCJIT/test-shift.ll

@@ -1,4 +1,4 @@
-; RUN: %lli -use-mcjit %s > /dev/null
+; RUN: %lli -mtriple=%mcjit_triple -use-mcjit %s > /dev/null
 
 
 define i32 @main() {
 define i32 @main() {
 	%shamt = add i8 0, 1		; <i8> [#uses=8]
 	%shamt = add i8 0, 1		; <i8> [#uses=8]

+ 7 - 0
test/lit.cfg

@@ -139,6 +139,13 @@ if config.test_exec_root is None:
 
 
 ###
 ###
 
 
+# Provide a target triple for mcjit tests
+mcjit_triple = config.target_triple
+# Force ELF format on Windows
+if 'win32' in mcjit_triple.lower():
+  mcjit_triple += "-elf"
+config.substitutions.append( ('%mcjit_triple', mcjit_triple) )
+
 # When running under valgrind, we mangle '-vg' or '-vg_leak' onto the end of the
 # When running under valgrind, we mangle '-vg' or '-vg_leak' onto the end of the
 # triple so we can check it with XFAIL and XTARGET.
 # triple so we can check it with XFAIL and XTARGET.
 config.target_triple += lit.valgrindTriple
 config.target_triple += lit.valgrindTriple