llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang @llvm/pr-subscribers-clang-codegen Author: AtariDreams (AtariDreams) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/79174.diff 1 Files Affected: - (modified) clang/lib/CodeGen/CGBuiltin.cpp (+17-3) ``````````diff diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 7ef764b8e1ac80..e404f92c284aaf 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -1203,10 +1203,24 @@ static llvm::Value *EmitX86BitTestIntrinsic(CodeGenFunction &CGF, AsmOS << "bt"; if (Action) AsmOS << Action; - AsmOS << SizeSuffix << " $2, ($1)"; - // Build the constraints. FIXME: We should support immediates when possible. - std::string Constraints = "={@ccc},r,r,~{cc},~{memory}"; + // Check if BitPos is a ConstantInt (immediate value) + if (llvm::ConstantInt *CI = llvm::dyn_cast<llvm::ConstantInt>(BitPos)) { + // If it is, use the immediate value in the assembly string + AsmOS << SizeSuffix << " $" << CI->getZExtValue() << ", ($1)"; + } else { + // Otherwise, fall back to the existing behavior + AsmOS << SizeSuffix << " $2, ($1)"; + } + + // Build the constraints. + std::string Constraints; + if (llvm::isa<llvm::ConstantInt>(BitPos)) { + Constraints = "={@ccc},r,~{cc},~{memory}"; + } else { + Constraints = "={@ccc},r,r,~{cc},~{memory}"; + } + std::string_view MachineClobbers = CGF.getTarget().getClobbers(); if (!MachineClobbers.empty()) { Constraints += ','; `````````` </details> https://github.com/llvm/llvm-project/pull/79174 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits