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

Override the datalayout in a module with -triple.

This matches llc's behavior.

Before this patch clang would create a TargetInfo base on -triple but a llvm
CodeGen based on the triple in the module.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197837 91177308-0d34-0410-b5e6-96231b3b80d8
Rafael Espindola пре 11 година
родитељ
комит
6d984eb5d2
2 измењених фајлова са 17 додато и 2 уклоњено
  1. 10 1
      lib/CodeGen/CodeGenAction.cpp
  2. 7 1
      test/Frontend/ir-support-codegen.ll

+ 10 - 1
lib/CodeGen/CodeGenAction.cpp

@@ -419,9 +419,18 @@ void CodeGenAction::ExecuteAction() {
       CI.getDiagnostics().Report(Loc, DiagID);
       CI.getDiagnostics().Report(Loc, DiagID);
       return;
       return;
     }
     }
+    const TargetOptions &TargetOpts = CI.getTargetOpts();
+    if (TheModule->getTargetTriple() != TargetOpts.Triple) {
+      unsigned DiagID = CI.getDiagnostics().getCustomDiagID(
+          DiagnosticsEngine::Warning,
+          "overriding the module target triple with %0");
+
+      CI.getDiagnostics().Report(SourceLocation(), DiagID) << TargetOpts.Triple;
+      TheModule->setTargetTriple(TargetOpts.Triple);
+    }
 
 
     EmitBackendOutput(CI.getDiagnostics(), CI.getCodeGenOpts(),
     EmitBackendOutput(CI.getDiagnostics(), CI.getCodeGenOpts(),
-                      CI.getTargetOpts(), CI.getLangOpts(),
+                      TargetOpts, CI.getLangOpts(),
                       TheModule.get(),
                       TheModule.get(),
                       BA, OS);
                       BA, OS);
     return;
     return;

+ 7 - 1
test/Frontend/ir-support-codegen.ll

@@ -1,9 +1,15 @@
 ; REQUIRES: x86-registered-target
 ; REQUIRES: x86-registered-target
-; RUN: %clang_cc1 -S -o - %s | FileCheck %s
+; RUN: %clang_cc1 -triple x86_64-apple-darwin10 -S -o - %s | FileCheck %s
+
+; RUN: %clang_cc1 -triple x86_64-pc-linux -S -o %t %s 2>&1 | \
+; RUN: FileCheck --check-prefix=WARN %s
+; WARN: warning: overriding the module target triple with x86_64-pc-linux
+; RUN: FileCheck --check-prefix=LINUX %s < %t
 
 
 target triple = "x86_64-apple-darwin10"
 target triple = "x86_64-apple-darwin10"
 
 
 ; CHECK: .globl _f0
 ; CHECK: .globl _f0
+; LINUX: .globl f0
 define i32 @f0() nounwind ssp {
 define i32 @f0() nounwind ssp {
        ret i32 0
        ret i32 0
 }
 }