diff --git a/llvm/test/tools/opt/invalid-target.ll b/llvm/test/tools/opt/invalid-target.ll index e55a8a44126ac..e128dff5cea16 100644 --- a/llvm/test/tools/opt/invalid-target.ll +++ b/llvm/test/tools/opt/invalid-target.ll @@ -7,10 +7,10 @@ ;; Using "unknown" as the architecture is explicitly allowed (but warns) ; RUN: opt -mtriple=unknown -S -passes=no-op-module -o /dev/null < %s 2>&1 | FileCheck %s --check-prefix=UNKNOWN -; UNKNOWN: warning: failed to infer data layout: unable to get target for 'unknown', see --version and --triple. +; UNKNOWN: warning: failed to infer data layout from target triple{{$}} ;; However, any other invalid target triple should cause the tool to fail: ; RUN: not opt -mtriple=invalid -S -passes=no-op-module -o /dev/null < %s 2>&1 | FileCheck %s --check-prefix=INVALID -; INVALID: warning: failed to infer data layout: unable to get target for 'invalid', see --version and --triple. +; INVALID: warning: failed to infer data layout from target triple{{$}} ; INVALID-NEXT: unrecognized architecture 'invalid' provided. ; INVALID-EMPTY: diff --git a/llvm/tools/opt/optdriver.cpp b/llvm/tools/opt/optdriver.cpp index d24c8abef31d0..63c47151389b5 100644 --- a/llvm/tools/opt/optdriver.cpp +++ b/llvm/tools/opt/optdriver.cpp @@ -538,15 +538,16 @@ optMain(int argc, char **argv, // the IR, we should default to an empty (default) DataLayout. if (TripleStr.empty()) return std::nullopt; - // Otherwise we infer the DataLayout from the target machine. - Expected> ExpectedTM = - codegen::createTargetMachineForTriple(TripleStr, GetCodeGenOptLevel()); - if (!ExpectedTM) { - errs() << argv[0] << ": warning: failed to infer data layout: " - << toString(ExpectedTM.takeError()) << "\n"; + + Triple TT(TripleStr); + + std::string Str = TT.computeDataLayout(); + if (Str.empty()) { + errs() << argv[0] + << ": warning: failed to infer data layout from target triple\n"; return std::nullopt; } - return (*ExpectedTM)->createDataLayout().getStringRepresentation(); + return Str; }; std::unique_ptr M; if (NoUpgradeDebugInfo)