[Lldb-commits] [lldb] 21a74f5 - Revert "[lldb] Add FP conversion instructions to IR interpreter (#175292)"
Igor Kudrin via lldb-commits
lldb-commits at lists.llvm.org
Fri Jan 30 12:02:07 PST 2026
Author: Igor Kudrin
Date: 2026-01-30T12:01:45-08:00
New Revision: 21a74f527839b5b8dd882e62a25093d980c79078
URL: https://github.com/llvm/llvm-project/commit/21a74f527839b5b8dd882e62a25093d980c79078
DIFF: https://github.com/llvm/llvm-project/commit/21a74f527839b5b8dd882e62a25093d980c79078.diff
LOG: Revert "[lldb] Add FP conversion instructions to IR interpreter (#175292)"
This reverts commit c2082a65b7fc8e7587ed07170e250820d6bbda1d.
Added:
Modified:
lldb/packages/Python/lldbsuite/test/make/Makefile.rules
lldb/source/Expression/IRInterpreter.cpp
lldb/test/API/commands/expression/ir-interpreter/TestIRInterpreter.py
lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py
Removed:
################################################################################
diff --git a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
index a0d40ab868874..59d6c790d4fb6 100644
--- a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
+++ b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules
@@ -156,7 +156,7 @@ ifeq "$(HOST_OS)" "Darwin"
LDFLAGS += -fuse-ld=lld
endif
endif
-
+LDFLAGS += -fuse-ld=lld
#----------------------------------------------------------------------
# ARCHFLAG is the flag used to tell the compiler which architecture
diff --git a/lldb/source/Expression/IRInterpreter.cpp b/lldb/source/Expression/IRInterpreter.cpp
index 5ca64843d5900..48b4dd67d2d89 100644
--- a/lldb/source/Expression/IRInterpreter.cpp
+++ b/lldb/source/Expression/IRInterpreter.cpp
@@ -611,8 +611,6 @@ bool IRInterpreter::CanInterpret(llvm::Module &module, llvm::Function &function,
} break;
case Instruction::And:
case Instruction::AShr:
- case Instruction::FPToUI:
- case Instruction::FPToSI:
case Instruction::IntToPtr:
case Instruction::PtrToInt:
case Instruction::Load:
@@ -637,18 +635,6 @@ bool IRInterpreter::CanInterpret(llvm::Module &module, llvm::Function &function,
case Instruction::FMul:
case Instruction::FDiv:
break;
- case Instruction::UIToFP:
- case Instruction::SIToFP:
- case Instruction::FPTrunc:
- case Instruction::FPExt:
- if (!ii.getType()->isFloatTy() && !ii.getType()->isDoubleTy()) {
- LLDB_LOGF(log, "Unsupported instruction: %s",
- PrintValue(&ii).c_str());
- error =
- lldb_private::Status::FromErrorString(unsupported_opcode_error);
- return false;
- }
- break;
}
for (unsigned oi = 0, oe = ii.getNumOperands(); oi != oe; ++oi) {
@@ -1271,78 +1257,6 @@ bool IRInterpreter::Interpret(llvm::Module &module, llvm::Function &function,
LLDB_LOGF(log, " = : %s", frame.SummarizeValue(inst).c_str());
}
} break;
- case Instruction::FPToUI:
- case Instruction::FPToSI: {
- Value *src_operand = inst->getOperand(0);
-
- lldb_private::Scalar S;
- if (!frame.EvaluateValue(S, src_operand, module)) {
- LLDB_LOGF(log, "Couldn't evaluate %s", PrintValue(src_operand).c_str());
- error = lldb_private::Status::FromErrorString(bad_value_error);
- return false;
- }
-
- assert(inst->getType()->isIntegerTy() && "Unexpected target type");
- llvm::APSInt result(inst->getType()->getIntegerBitWidth(),
- /*isUnsigned=*/inst->getOpcode() ==
- Instruction::FPToUI);
- assert(S.GetType() == lldb_private::Scalar::e_float &&
- "Unexpected source type");
- bool isExact;
- llvm::APFloatBase::opStatus status = S.GetAPFloat().convertToInteger(
- result, llvm::APFloat::rmTowardZero, &isExact);
- // Casting floating point values that are out of bounds of the target type
- // is undefined behaviour.
- if (status & llvm::APFloatBase::opInvalidOp) {
- std::string s;
- raw_string_ostream rso(s);
- rso << "Conversion error: " << S << " cannot be converted to ";
- if (inst->getOpcode() == Instruction::FPToUI)
- rso << "unsigned ";
- rso << *inst->getType();
- LLDB_LOGF(log, "%s", s.c_str());
- error = lldb_private::Status::FromErrorString(s.c_str());
- return false;
- }
- lldb_private::Scalar R(result);
-
- frame.AssignValue(inst, R, module);
- if (log) {
- LLDB_LOGF(log, "Interpreted a %s", inst->getOpcodeName());
- LLDB_LOGF(log, " Src : %s", frame.SummarizeValue(src_operand).c_str());
- LLDB_LOGF(log, " = : %s", frame.SummarizeValue(inst).c_str());
- }
- } break;
- case Instruction::UIToFP:
- case Instruction::SIToFP:
- case Instruction::FPTrunc:
- case Instruction::FPExt: {
- Value *src_operand = inst->getOperand(0);
-
- lldb_private::Scalar S;
- if (!frame.EvaluateValue(S, src_operand, module)) {
- LLDB_LOGF(log, "Couldn't evaluate %s", PrintValue(src_operand).c_str());
- error = lldb_private::Status::FromErrorString(bad_value_error);
- return false;
- }
- lldb_private::Scalar R;
-
- Type *result_type = inst->getType();
- assert(
- (result_type->isFloatTy() || result_type->isDoubleTy()) &&
- "Unsupported result type; CanInterpret() should have checked that");
- if (result_type->isFloatTy())
- R = S.Float();
- else
- R = S.Double();
-
- frame.AssignValue(inst, R, module);
- if (log) {
- LLDB_LOGF(log, "Interpreted a %s", inst->getOpcodeName());
- LLDB_LOGF(log, " Src : %s", frame.SummarizeValue(src_operand).c_str());
- LLDB_LOGF(log, " = : %s", frame.SummarizeValue(inst).c_str());
- }
- } break;
case Instruction::Load: {
const LoadInst *load_inst = cast<LoadInst>(inst);
diff --git a/lldb/test/API/commands/expression/ir-interpreter/TestIRInterpreter.py b/lldb/test/API/commands/expression/ir-interpreter/TestIRInterpreter.py
index 88bc29c8f7de8..23188ef898d56 100644
--- a/lldb/test/API/commands/expression/ir-interpreter/TestIRInterpreter.py
+++ b/lldb/test/API/commands/expression/ir-interpreter/TestIRInterpreter.py
@@ -172,105 +172,3 @@ def test_type_conversions(self):
self.assertEqual(short_val.GetValueAsSigned(), -1)
long_val = target.EvaluateExpression("(long) " + short_val.GetName())
self.assertEqual(long_val.GetValueAsSigned(), -1)
-
- def test_fpconv(self):
- self.build_and_run()
-
- interp_options = lldb.SBExpressionOptions()
- interp_options.SetLanguage(lldb.eLanguageTypeC_plus_plus)
- interp_options.SetAllowJIT(False)
-
- jit_options = lldb.SBExpressionOptions()
- jit_options.SetLanguage(lldb.eLanguageTypeC_plus_plus)
- jit_options.SetAllowJIT(True)
-
- set_up_expressions = [
- "int $i = 3",
- "int $n = -3",
- "unsigned $u = 5",
- "long $l = -7",
- "float $f = 9.0625",
- "double $d = 13.75",
- "float $nf = -11.25",
- ]
-
- expressions = [
- "$i + $f", # sitofp i32 to float
- "$d - $n", # sitofp i32 to double
- "$u + $f", # uitofp i32 to float
- "$u + $d", # uitofp i32 to double
- "(int)$d", # fptosi double to i32
- "(int)$f", # fptosi float to i32
- "(long)$d", # fptosi double to i64
- "(short)$f", # fptosi float to i16
- "(long)$nf", # fptosi float to i64
- "(unsigned short)$f", # fptoui float to i16
- "(unsigned)$d", # fptoui double to i32
- "(unsigned long)$d", # fptoui double to i64
- "(float)$d", # fptrunc double to float
- "(double)$f", # fpext float to double
- "(double)$nf", # fpext float to double
- ]
-
- for expression in set_up_expressions:
- self.frame().EvaluateExpression(expression, interp_options)
-
- func_call = "(int)getpid()"
- if lldbplatformutil.getPlatform() == "windows":
- func_call = "(int)GetCurrentProcessId()"
-
- for expression in expressions:
- interp_expression = expression
- # Calling a function forces the expression to be executed with JIT.
- jit_expression = func_call + "; " + expression
-
- interp_result = self.frame().EvaluateExpression(
- interp_expression, interp_options
- )
- jit_result = self.frame().EvaluateExpression(jit_expression, jit_options)
-
- self.assertEqual(
- interp_result.GetValue(),
- jit_result.GetValue(),
- "Values match for " + expression,
- )
- self.assertEqual(
- interp_result.GetTypeName(),
- jit_result.GetTypeName(),
- "Types match for " + expression,
- )
-
- def test_fpconv_ub(self):
- target = self.dbg.GetDummyTarget()
-
- set_up_expressions = [
- "float $f = 3e9",
- "double $d = 1e20",
- "float $nf = -1.5",
- ]
-
- expressions = [
- ("(int)$f", "Conversion error: (float) 3.0E+9 cannot be converted to i32"),
- (
- "(long)$d",
- "Conversion error: (float) 1.0E+20 cannot be converted to i64",
- ),
- (
- "(unsigned)$nf",
- "Conversion error: (float) -1.5 cannot be converted to unsigned i32",
- ),
- ]
-
- for expression in set_up_expressions:
- target.EvaluateExpression(expression)
-
- # The IR Interpreter returns an error if a value cannot be converted.
- for expression in expressions:
- result = target.EvaluateExpression(expression[0])
- self.assertIn(expression[1], str(result.GetError()))
-
- # The conversion should succeed if the destination type can represent the result.
- self.expect_expr(
- "(unsigned)$f", result_type="unsigned int", result_value="3000000000"
- )
- self.expect_expr("(int)$nf", result_type="int", result_value="-1")
diff --git a/lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py b/lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py
index 0b63e15e876d6..ff63141b41633 100644
--- a/lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py
+++ b/lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py
@@ -8,7 +8,7 @@
class PlatformProcessCrashInfoTestCase(TestBase):
- @expectedFailureAll(oslist=["windows", "linux", "freebsd", "netbsd"])
+ #@expectedFailureAll(oslist=["windows", "linux", "freebsd", "netbsd"])
@skipIfDarwin # rdar://120795095
def test_thread_local(self):
# Set a breakpoint on the first instruction of the main function,
More information about the lldb-commits
mailing list