[Lldb-commits] [lldb] 8eed95c - Adapt IRForTarget::RewriteObjCSelector() for D126689.

Adrian Prantl via lldb-commits lldb-commits at lists.llvm.org
Thu Jun 2 11:42:53 PDT 2022


Author: Adrian Prantl
Date: 2022-06-02T11:42:28-07:00
New Revision: 8eed95c83ecd0e42eaaca4f6591faafa4dad0d88

URL: https://github.com/llvm/llvm-project/commit/8eed95c83ecd0e42eaaca4f6591faafa4dad0d88
DIFF: https://github.com/llvm/llvm-project/commit/8eed95c83ecd0e42eaaca4f6591faafa4dad0d88.diff

LOG: Adapt IRForTarget::RewriteObjCSelector() for D126689.

With opaque pointers, the LLVM IR expected by this function changed.

Added: 
    

Modified: 
    lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp
index 60fe84035a5b7..bd30ab546d4b8 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp
@@ -758,17 +758,16 @@ bool IRForTarget::RewriteObjCSelector(Instruction *selector_load) {
   // Unpack the message name from the selector.  In LLVM IR, an objc_msgSend
   // gets represented as
   //
-  // %tmp     = load i8** @"OBJC_SELECTOR_REFERENCES_" ; <i8*> %call    = call
-  // i8* (i8*, i8*, ...)* @objc_msgSend(i8* %obj, i8* %tmp, ...) ; <i8*>
+  //   %sel = load ptr, ptr @OBJC_SELECTOR_REFERENCES_, align 8
+  //   call i8 @objc_msgSend(ptr %obj, ptr %sel, ...)
   //
-  // where %obj is the object pointer and %tmp is the selector.
+  // where %obj is the object pointer and %sel is the selector.
   //
   // @"OBJC_SELECTOR_REFERENCES_" is a pointer to a character array called
   // @"\01L_OBJC_llvm_moduleETH_VAR_NAllvm_moduleE_".
   // @"\01L_OBJC_llvm_moduleETH_VAR_NAllvm_moduleE_" contains the string.
 
-  // Find the pointer's initializer (a ConstantExpr with opcode GetElementPtr)
-  // and get the string from its target
+  // Find the pointer's initializer and get the string from its target.
 
   GlobalVariable *_objc_selector_references_ =
       dyn_cast<GlobalVariable>(load->getPointerOperand());
@@ -778,22 +777,13 @@ bool IRForTarget::RewriteObjCSelector(Instruction *selector_load) {
     return false;
 
   Constant *osr_initializer = _objc_selector_references_->getInitializer();
-
-  ConstantExpr *osr_initializer_expr = dyn_cast<ConstantExpr>(osr_initializer);
-
-  if (!osr_initializer_expr ||
-      osr_initializer_expr->getOpcode() != Instruction::GetElementPtr)
-    return false;
-
-  Value *osr_initializer_base = osr_initializer_expr->getOperand(0);
-
-  if (!osr_initializer_base)
+  if (!osr_initializer)
     return false;
 
   // Find the string's initializer (a ConstantArray) and get the string from it
 
   GlobalVariable *_objc_meth_var_name_ =
-      dyn_cast<GlobalVariable>(osr_initializer_base);
+      dyn_cast<GlobalVariable>(osr_initializer);
 
   if (!_objc_meth_var_name_ || !_objc_meth_var_name_->hasInitializer())
     return false;


        


More information about the lldb-commits mailing list