// hunt back till you find the string.. std::string Aa::locate_portname_for_io_call(llvm::Value *strptr) { std::string ret_string; ConstantArray* konst = NULL; ConstantExpr* konst_expr = NULL; GetElementPtrInst* gep_instr; std::deque<llvm::Value*> queue; queue.push_back(strptr); while (!queue.empty()) { llvm::Value *val = queue.front(); queue.pop_front(); konst = dyn_cast<ConstantArray>(val); if (konst != NULL) break; konst_expr = dyn_cast<ConstantExpr>(val); if (konst_expr != NULL) { ret_string = locate_portname_from_constant_expression(konst_expr); break; } gep_instr = dyn_cast<GetElementPtrInst>(val); if(gep_instr != NULL) { ret_string = locate_portname_from_gep_instruction(gep_instr); break; } if (!isa<User>(val)) continue; User *u = dyn_cast<User>(val); for (User::op_iterator oi = u->op_begin(), oe = u->op_end(); oi != oe; ++oi) { llvm::Value *opnd = oi->get(); queue.push_back(opnd); } } if(konst != NULL) { if(konst->isString()) ret_string = konst->getAsString(); } return(ret_string); }