-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Revert "Reland yet again: [mlir] Add FP software implementation lowering pass: arith-to-apfloat"
#167834
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Revert "Reland yet again: [mlir] Add FP software implementation lowering pass: arith-to-apfloat"
#167834
Conversation
…ing pass…" This reverts commit 0bba1e7.
|
@llvm/pr-subscribers-mlir-func @llvm/pr-subscribers-mlir-llvm Author: Maksim Levental (makslevental) ChangesReverts llvm/llvm-project#167608 Broken builder https://lab.llvm.org/buildbot/#/builders/52/builds/12781 Patch is 30.41 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/167834.diff 17 Files Affected:
diff --git a/mlir/include/mlir/Conversion/ArithToAPFloat/ArithToAPFloat.h b/mlir/include/mlir/Conversion/ArithToAPFloat/ArithToAPFloat.h
deleted file mode 100644
index 64a42a228199e..0000000000000
--- a/mlir/include/mlir/Conversion/ArithToAPFloat/ArithToAPFloat.h
+++ /dev/null
@@ -1,21 +0,0 @@
-//===- ArithToAPFloat.h - Arith to APFloat impl conversion ---*- C++ ----*-===//
-//
-// Part of the APFloat Project, under the Apache License v2.0 with APFloat
-// Exceptions. See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH APFloat-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MLIR_CONVERSION_ARITHTOAPFLOAT_ARITHTOAPFLOAT_H
-#define MLIR_CONVERSION_ARITHTOAPFLOAT_ARITHTOAPFLOAT_H
-
-#include <memory>
-
-namespace mlir {
-class Pass;
-
-#define GEN_PASS_DECL_ARITHTOAPFLOATCONVERSIONPASS
-#include "mlir/Conversion/Passes.h.inc"
-} // namespace mlir
-
-#endif // MLIR_CONVERSION_ARITHTOAPFLOAT_ARITHTOAPFLOAT_H
diff --git a/mlir/include/mlir/Conversion/Passes.h b/mlir/include/mlir/Conversion/Passes.h
index 82bdfd02661a6..40d866ec7bf10 100644
--- a/mlir/include/mlir/Conversion/Passes.h
+++ b/mlir/include/mlir/Conversion/Passes.h
@@ -12,7 +12,6 @@
#include "mlir/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.h"
#include "mlir/Conversion/AffineToStandard/AffineToStandard.h"
#include "mlir/Conversion/ArithToAMDGPU/ArithToAMDGPU.h"
-#include "mlir/Conversion/ArithToAPFloat/ArithToAPFloat.h"
#include "mlir/Conversion/ArithToArmSME/ArithToArmSME.h"
#include "mlir/Conversion/ArithToEmitC/ArithToEmitCPass.h"
#include "mlir/Conversion/ArithToLLVM/ArithToLLVM.h"
diff --git a/mlir/include/mlir/Conversion/Passes.td b/mlir/include/mlir/Conversion/Passes.td
index 79bc380dbcb7a..70e3e45c225db 100644
--- a/mlir/include/mlir/Conversion/Passes.td
+++ b/mlir/include/mlir/Conversion/Passes.td
@@ -186,21 +186,6 @@ def ArithToLLVMConversionPass : Pass<"convert-arith-to-llvm"> {
];
}
-//===----------------------------------------------------------------------===//
-// ArithToAPFloat
-//===----------------------------------------------------------------------===//
-
-def ArithToAPFloatConversionPass
- : Pass<"convert-arith-to-apfloat", "ModuleOp"> {
- let summary = "Convert Arith ops to APFloat runtime library calls";
- let description = [{
- This pass converts supported Arith ops to APFloat-based runtime library
- calls (APFloatWrappers.cpp). APFloat is a software implementation of
- floating-point arithmetic operations.
- }];
- let dependentDialects = ["func::FuncDialect"];
-}
-
//===----------------------------------------------------------------------===//
// ArithToSPIRV
//===----------------------------------------------------------------------===//
diff --git a/mlir/include/mlir/Dialect/Func/Utils/Utils.h b/mlir/include/mlir/Dialect/Func/Utils/Utils.h
index 00d50874a2e8d..3576126a487ac 100644
--- a/mlir/include/mlir/Dialect/Func/Utils/Utils.h
+++ b/mlir/include/mlir/Dialect/Func/Utils/Utils.h
@@ -60,13 +60,6 @@ mlir::FailureOr<std::pair<mlir::func::FuncOp, mlir::func::CallOp>>
deduplicateArgsOfFuncOp(mlir::RewriterBase &rewriter, mlir::func::FuncOp funcOp,
mlir::ModuleOp moduleOp);
-/// Look up a FuncOp with signature `resultTypes`(`paramTypes`)` and name
-/// `name`. Return a failure if the FuncOp is found but with a different
-/// signature.
-FailureOr<FuncOp> lookupFnDecl(SymbolOpInterface symTable, StringRef name,
- FunctionType funcT,
- SymbolTableCollection *symbolTables = nullptr);
-
} // namespace func
} // namespace mlir
diff --git a/mlir/include/mlir/Dialect/LLVMIR/FunctionCallUtils.h b/mlir/include/mlir/Dialect/LLVMIR/FunctionCallUtils.h
index b09d32022e348..8ad9ed18acebd 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/FunctionCallUtils.h
+++ b/mlir/include/mlir/Dialect/LLVMIR/FunctionCallUtils.h
@@ -52,10 +52,6 @@ lookupOrCreatePrintF32Fn(OpBuilder &b, Operation *moduleOp,
FailureOr<LLVM::LLVMFuncOp>
lookupOrCreatePrintF64Fn(OpBuilder &b, Operation *moduleOp,
SymbolTableCollection *symbolTables = nullptr);
-FailureOr<LLVM::LLVMFuncOp>
-lookupOrCreateApFloatPrintFn(OpBuilder &b, Operation *moduleOp,
- SymbolTableCollection *symbolTables = nullptr);
-
/// Declares a function to print a C-string.
/// If a custom runtime function is defined via `runtimeFunctionName`, it must
/// have the signature void(char const*). The default function is `printString`.
diff --git a/mlir/lib/Conversion/ArithToAPFloat/ArithToAPFloat.cpp b/mlir/lib/Conversion/ArithToAPFloat/ArithToAPFloat.cpp
deleted file mode 100644
index 699edb188a70a..0000000000000
--- a/mlir/lib/Conversion/ArithToAPFloat/ArithToAPFloat.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-//===- ArithToAPFloat.cpp - Arithmetic to APFloat Conversion --------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "mlir/Conversion/ArithToAPFloat/ArithToAPFloat.h"
-
-#include "mlir/Dialect/Arith/IR/Arith.h"
-#include "mlir/Dialect/Arith/Transforms/Passes.h"
-#include "mlir/Dialect/Func/IR/FuncOps.h"
-#include "mlir/Dialect/Func/Utils/Utils.h"
-#include "mlir/IR/PatternMatch.h"
-#include "mlir/IR/Verifier.h"
-#include "mlir/Transforms/WalkPatternRewriteDriver.h"
-
-namespace mlir {
-#define GEN_PASS_DEF_ARITHTOAPFLOATCONVERSIONPASS
-#include "mlir/Conversion/Passes.h.inc"
-} // namespace mlir
-
-using namespace mlir;
-using namespace mlir::func;
-
-static FuncOp createFnDecl(OpBuilder &b, SymbolOpInterface symTable,
- StringRef name, FunctionType funcT, bool setPrivate,
- SymbolTableCollection *symbolTables = nullptr) {
- OpBuilder::InsertionGuard g(b);
- assert(!symTable->getRegion(0).empty() && "expected non-empty region");
- b.setInsertionPointToStart(&symTable->getRegion(0).front());
- FuncOp funcOp = FuncOp::create(b, symTable->getLoc(), name, funcT);
- if (setPrivate)
- funcOp.setPrivate();
- if (symbolTables) {
- SymbolTable &symbolTable = symbolTables->getSymbolTable(symTable);
- symbolTable.insert(funcOp, symTable->getRegion(0).front().begin());
- }
- return funcOp;
-}
-
-/// Helper function to look up or create the symbol for a runtime library
-/// function for a binary arithmetic operation.
-///
-/// Parameter 1: APFloat semantics
-/// Parameter 2: Left-hand side operand
-/// Parameter 3: Right-hand side operand
-///
-/// This function will return a failure if the function is found but has an
-/// unexpected signature.
-///
-static FailureOr<FuncOp>
-lookupOrCreateBinaryFn(OpBuilder &b, SymbolOpInterface symTable, StringRef name,
- SymbolTableCollection *symbolTables = nullptr) {
- auto i32Type = IntegerType::get(symTable->getContext(), 32);
- auto i64Type = IntegerType::get(symTable->getContext(), 64);
-
- std::string funcName = (llvm::Twine("_mlir_apfloat_") + name).str();
- FunctionType funcT =
- FunctionType::get(b.getContext(), {i32Type, i64Type, i64Type}, {i64Type});
- FailureOr<FuncOp> func =
- lookupFnDecl(symTable, funcName, funcT, symbolTables);
- // Failed due to type mismatch.
- if (failed(func))
- return func;
- // Successfully matched existing decl.
- if (*func)
- return *func;
-
- return createFnDecl(b, symTable, funcName, funcT,
- /*setPrivate=*/true, symbolTables);
-}
-
-/// Rewrite a binary arithmetic operation to an APFloat function call.
-template <typename OpTy>
-struct BinaryArithOpToAPFloatConversion final : OpRewritePattern<OpTy> {
- BinaryArithOpToAPFloatConversion(MLIRContext *context,
- const char *APFloatName,
- SymbolOpInterface symTable,
- PatternBenefit benefit = 1)
- : OpRewritePattern<OpTy>(context, benefit), symTable(symTable),
- APFloatName(APFloatName) {};
-
- LogicalResult matchAndRewrite(OpTy op,
- PatternRewriter &rewriter) const override {
- // Get APFloat function from runtime library.
- FailureOr<FuncOp> fn =
- lookupOrCreateBinaryFn(rewriter, symTable, APFloatName);
- if (failed(fn))
- return fn;
-
- rewriter.setInsertionPoint(op);
- // Cast operands to 64-bit integers.
- Location loc = op.getLoc();
- auto floatTy = cast<FloatType>(op.getType());
- auto intWType = rewriter.getIntegerType(floatTy.getWidth());
- auto int64Type = rewriter.getI64Type();
- Value lhsBits = arith::ExtUIOp::create(
- rewriter, loc, int64Type,
- arith::BitcastOp::create(rewriter, loc, intWType, op.getLhs()));
- Value rhsBits = arith::ExtUIOp::create(
- rewriter, loc, int64Type,
- arith::BitcastOp::create(rewriter, loc, intWType, op.getRhs()));
-
- // Call APFloat function.
- int32_t sem =
- llvm::APFloatBase::SemanticsToEnum(floatTy.getFloatSemantics());
- Value semValue = arith::ConstantOp::create(
- rewriter, loc, rewriter.getI32Type(),
- rewriter.getIntegerAttr(rewriter.getI32Type(), sem));
- SmallVector<Value> params = {semValue, lhsBits, rhsBits};
- auto resultOp =
- func::CallOp::create(rewriter, loc, TypeRange(rewriter.getI64Type()),
- SymbolRefAttr::get(*fn), params);
-
- // Truncate result to the original width.
- Value truncatedBits = arith::TruncIOp::create(rewriter, loc, intWType,
- resultOp->getResult(0));
- rewriter.replaceOp(
- op, arith::BitcastOp::create(rewriter, loc, floatTy, truncatedBits));
- return success();
- }
-
- SymbolOpInterface symTable;
- const char *APFloatName;
-};
-
-namespace {
-struct ArithToAPFloatConversionPass final
- : impl::ArithToAPFloatConversionPassBase<ArithToAPFloatConversionPass> {
- using Base::Base;
-
- void runOnOperation() override;
-};
-
-void ArithToAPFloatConversionPass::runOnOperation() {
- MLIRContext *context = &getContext();
- RewritePatternSet patterns(context);
- patterns.add<BinaryArithOpToAPFloatConversion<arith::AddFOp>>(context, "add",
- getOperation());
- patterns.add<BinaryArithOpToAPFloatConversion<arith::SubFOp>>(
- context, "subtract", getOperation());
- patterns.add<BinaryArithOpToAPFloatConversion<arith::MulFOp>>(
- context, "multiply", getOperation());
- patterns.add<BinaryArithOpToAPFloatConversion<arith::DivFOp>>(
- context, "divide", getOperation());
- patterns.add<BinaryArithOpToAPFloatConversion<arith::RemFOp>>(
- context, "remainder", getOperation());
- LogicalResult result = success();
- ScopedDiagnosticHandler scopedHandler(context, [&result](Diagnostic &diag) {
- if (diag.getSeverity() == DiagnosticSeverity::Error) {
- result = failure();
- }
- // NB: if you don't return failure, no other diag handlers will fire (see
- // mlir/lib/IR/Diagnostics.cpp:DiagnosticEngineImpl::emit).
- return failure();
- });
- walkAndApplyPatterns(getOperation(), std::move(patterns));
- if (failed(result))
- return signalPassFailure();
-}
-} // namespace
diff --git a/mlir/lib/Conversion/ArithToAPFloat/CMakeLists.txt b/mlir/lib/Conversion/ArithToAPFloat/CMakeLists.txt
deleted file mode 100644
index b5ec49c087163..0000000000000
--- a/mlir/lib/Conversion/ArithToAPFloat/CMakeLists.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-add_mlir_conversion_library(MLIRArithToAPFloat
- ArithToAPFloat.cpp
-
- ADDITIONAL_HEADER_DIRS
- ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/ArithToLLVM
-
- DEPENDS
- MLIRConversionPassIncGen
-
- LINK_COMPONENTS
- Core
-
- LINK_LIBS PUBLIC
- MLIRArithDialect
- MLIRArithTransforms
- MLIRFuncDialect
- MLIRFuncUtils
- )
diff --git a/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp b/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp
index f2bacc3399144..b6099902cc337 100644
--- a/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp
+++ b/mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp
@@ -14,7 +14,6 @@
#include "mlir/Conversion/LLVMCommon/VectorPattern.h"
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Arith/Transforms/Passes.h"
-#include "mlir/Dialect/LLVMIR/FunctionCallUtils.h"
#include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/IR/TypeUtilities.h"
diff --git a/mlir/lib/Conversion/CMakeLists.txt b/mlir/lib/Conversion/CMakeLists.txt
index 613dc6d242ceb..bebf1b8fff3f9 100644
--- a/mlir/lib/Conversion/CMakeLists.txt
+++ b/mlir/lib/Conversion/CMakeLists.txt
@@ -2,7 +2,6 @@ add_subdirectory(AffineToStandard)
add_subdirectory(AMDGPUToROCDL)
add_subdirectory(ArithCommon)
add_subdirectory(ArithToAMDGPU)
-add_subdirectory(ArithToAPFloat)
add_subdirectory(ArithToArmSME)
add_subdirectory(ArithToEmitC)
add_subdirectory(ArithToLLVM)
diff --git a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp
index c747e1b59558a..69a317ecd101f 100644
--- a/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp
+++ b/mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp
@@ -1654,20 +1654,6 @@ class VectorPrintOpConversion : public ConvertOpToLLVMPattern<vector::PrintOp> {
return failure();
}
}
- } else if (auto floatTy = dyn_cast<FloatType>(printType)) {
- // Print other floating-point types using the APFloat runtime library.
- int32_t sem =
- llvm::APFloatBase::SemanticsToEnum(floatTy.getFloatSemantics());
- Value semValue = LLVM::ConstantOp::create(
- rewriter, loc, rewriter.getI32Type(),
- rewriter.getIntegerAttr(rewriter.getI32Type(), sem));
- Value floatBits =
- LLVM::ZExtOp::create(rewriter, loc, rewriter.getI64Type(), value);
- printer =
- LLVM::lookupOrCreateApFloatPrintFn(rewriter, parent, symbolTables);
- emitCall(rewriter, loc, printer.value(),
- ValueRange({semValue, floatBits}));
- return success();
} else {
return failure();
}
diff --git a/mlir/lib/Dialect/Func/Utils/Utils.cpp b/mlir/lib/Dialect/Func/Utils/Utils.cpp
index d6dfd0229963c..b4cb0932ef631 100644
--- a/mlir/lib/Dialect/Func/Utils/Utils.cpp
+++ b/mlir/lib/Dialect/Func/Utils/Utils.cpp
@@ -254,28 +254,3 @@ func::deduplicateArgsOfFuncOp(RewriterBase &rewriter, func::FuncOp funcOp,
return std::make_pair(*newFuncOpOrFailure, newCallOp);
}
-
-FailureOr<func::FuncOp>
-func::lookupFnDecl(SymbolOpInterface symTable, StringRef name,
- FunctionType funcT, SymbolTableCollection *symbolTables) {
- FuncOp func;
- if (symbolTables) {
- func = symbolTables->lookupSymbolIn<FuncOp>(
- symTable, StringAttr::get(symTable->getContext(), name));
- } else {
- func = llvm::dyn_cast_or_null<FuncOp>(
- SymbolTable::lookupSymbolIn(symTable, name));
- }
-
- if (!func)
- return func;
-
- mlir::FunctionType foundFuncT = func.getFunctionType();
- // Assert the signature of the found function is same as expected
- if (funcT != foundFuncT) {
- return func.emitError("matched function '")
- << name << "' but with different type: " << foundFuncT
- << " (expected " << funcT << ")";
- }
- return func;
-}
diff --git a/mlir/lib/Dialect/LLVMIR/IR/FunctionCallUtils.cpp b/mlir/lib/Dialect/LLVMIR/IR/FunctionCallUtils.cpp
index 160b6ae89215c..feaffa34897b6 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/FunctionCallUtils.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/FunctionCallUtils.cpp
@@ -30,7 +30,6 @@ static constexpr llvm::StringRef kPrintF16 = "printF16";
static constexpr llvm::StringRef kPrintBF16 = "printBF16";
static constexpr llvm::StringRef kPrintF32 = "printF32";
static constexpr llvm::StringRef kPrintF64 = "printF64";
-static constexpr llvm::StringRef kPrintApFloat = "printApFloat";
static constexpr llvm::StringRef kPrintString = "printString";
static constexpr llvm::StringRef kPrintOpen = "printOpen";
static constexpr llvm::StringRef kPrintClose = "printClose";
@@ -161,16 +160,6 @@ mlir::LLVM::lookupOrCreatePrintF64Fn(OpBuilder &b, Operation *moduleOp,
LLVM::LLVMVoidType::get(moduleOp->getContext()), symbolTables);
}
-FailureOr<LLVM::LLVMFuncOp>
-mlir::LLVM::lookupOrCreateApFloatPrintFn(OpBuilder &b, Operation *moduleOp,
- SymbolTableCollection *symbolTables) {
- return lookupOrCreateReservedFn(
- b, moduleOp, kPrintApFloat,
- {IntegerType::get(moduleOp->getContext(), 32),
- IntegerType::get(moduleOp->getContext(), 64)},
- LLVM::LLVMVoidType::get(moduleOp->getContext()), symbolTables);
-}
-
static LLVM::LLVMPointerType getCharPtr(MLIRContext *context) {
return LLVM::LLVMPointerType::get(context);
}
diff --git a/mlir/lib/ExecutionEngine/APFloatWrappers.cpp b/mlir/lib/ExecutionEngine/APFloatWrappers.cpp
deleted file mode 100644
index 0a05f7369e556..0000000000000
--- a/mlir/lib/ExecutionEngine/APFloatWrappers.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-//===- APFloatWrappers.cpp - Software Implementation of FP Arithmetics --- ===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file exposes the APFloat infrastructure to MLIR programs as a runtime
-// library. APFloat is a software implementation of floating point arithmetics.
-//
-// On the MLIR side, floating-point values must be bitcasted to 64-bit integers
-// before calling a runtime function. If a floating-point type has less than
-// 64 bits, it must be zero-extended to 64 bits after bitcasting it to an
-// integer.
-//
-// Runtime functions receive the floating-point operands of the arithmeic
-// operation in the form of 64-bit integers, along with the APFloat semantics
-// in the form of a 32-bit integer, which will be interpreted as an
-// APFloatBase::Semantics enum value.
-//
-#include "llvm/ADT/APFloat.h"
-
-#ifdef _WIN32
-#ifndef MLIR_APFLOAT_WRAPPERS_EXPORT
-#ifdef mlir_apfloat_wrappers_EXPORTS
-// We are building this library
-#define MLIR_APFLOAT_WRAPPERS_EXPORT __declspec(dllexport)
-#else
-// We are using this library
-#define MLIR_APFLOAT_WRAPPERS_EXPORT __declspec(dllimport)
-#endif // mlir_apfloat_wrappers_EXPORTS
-#endif // MLIR_APFLOAT_WRAPPERS_EXPORT
-#else
-// Non-windows: use visibility attributes.
-#define MLIR_APFLOAT_WRAPPERS_EXPORT __attribute__((visibility("default")))
-#endif // _WIN32
-
-/// Binary operations without rounding mode.
-#define APFLOAT_BINARY_OP(OP) \
- MLIR_APFLOAT_WRAPPERS_EXPORT int64_t _mlir_apfloat_##OP( \
- int32_t semantics, uint64_t a, uint64_t b) { \
- const llvm::fltSemantics &sem = llvm::APFloatBase::EnumToSemantics( \
- static_cast<llvm::APFloatBase::Semantics>(semantics)); \
- unsigned bitWidth = llvm::APFloatBase::semanticsSizeInBits(sem); \
- llvm::APFloat lhs(sem, llvm::APInt(bitWidth, a)); \
- llvm::APFloat rhs(sem, llvm::APInt(bitWidth, b)); \
- lhs.OP(rhs); \
- return lhs.bitcastToAPInt().getZExtValue(); \
- }
-
-/// Binary operations with rounding mode.
-#define APFLOAT_BINARY_OP_ROUNDING_MODE(OP, ROUNDING_MODE) \
- MLIR_APFLOAT_WRAPPERS_EXPORT int64_t _mlir_apfloat_##OP( \
- int32_t semantics, uint64_t a, uint64_t b) { \
- const llvm::fltSemantics &sem = llvm::APFloatBase::EnumToSemantics( \
- static_cast<llvm::APFloatBase::Semantics>(semantics)); \
- unsigned bitWidth = llvm::APFloatBase::semanticsSizeInBits(sem); \
- llvm::APFloat lhs(sem, llvm::APInt(bitWidth, a)); \
- llvm::APFlo...
[truncated]
|
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/116/builds/20923 Here is the relevant piece of the build log for the reference |
Reverts #167608
Broken builder https://lab.llvm.org/buildbot/#/builders/52/builds/12781
https://lab.llvm.org/buildbot/#/builders/169/builds/17002