第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

[llvm] LLVM 核心類簡明示例

標(biāo)簽:
C++

LLVM 核心类简明示例 : llvm::Value && llvm::Type && llvm::Constant

llvm核心类位于 include/llvm/IR中,用以表示机器无关且表现力极强的LLVM IR。

llvm::Value

llvm::Value则是这其中的重中之重,它用来表示一个具有类型的值。它是类图如下:
5ba695ef0001a83710671827.jpg

llvm::Argument,llvm::BasicBlock,llvm::Constant,llvm::Instruction这些很重要的类都是它的子类。

llvm::Value有一个llvm::Type*成员和一个use list。后者可以跟踪有哪些其他Value使用了自己,我们可以使用下面的迭代器对它进行访问:

  • unsigned use_size() 返回有多少Value使用它

  • bool use_empty() 是否没有Value使用它

  • use_iterator use_begin() 返回use list的迭代器头

  • use_iterator use_end() 返回尾

  • User *use_back() 返回use list的最后一个元素

int main() {
    Value* val1 = ConstantFP::get(theContext, APFloat(3.2));    if (val1->use_empty()) {        std::cout << "no one use it\n";
    }
    system("pause");    return 0;
}

llvm:Type

前者顾名思义表示一个类型。可以通过Value::getType()获取到这个llvm::Type*,它有一些is*()成员函数可以判断是下面哪种类型:

  enum TypeID {    // PrimitiveTypes - make sure LastPrimitiveTyID stays up to date.
    VoidTyID = 0,    ///<  0: type with no size
    HalfTyID,        ///<  1: 16-bit floating point type
    FloatTyID,       ///<  2: 32-bit floating point type
    DoubleTyID,      ///<  3: 64-bit floating point type
    X86_FP80TyID,    ///<  4: 80-bit floating point type (X87)
    FP128TyID,       ///<  5: 128-bit floating point type (112-bit mantissa)
    PPC_FP128TyID,   ///<  6: 128-bit floating point type (two 64-bits, PowerPC)
    LabelTyID,       ///<  7: Labels
    MetadataTyID,    ///<  8: Metadata
    X86_MMXTyID,     ///<  9: MMX vectors (64 bits, X86 specific)
    TokenTyID,       ///< 10: Tokens

    // Derived types... see DerivedTypes.h file.
    // Make sure FirstDerivedTyID stays up to date!
    IntegerTyID,     ///< 11: Arbitrary bit width integers
    FunctionTyID,    ///< 12: Functions
    StructTyID,      ///< 13: Structures
    ArrayTyID,       ///< 14: Arrays
    PointerTyID,     ///< 15: Pointers
    VectorTyID       ///< 16: SIMD 'packed' format, or other vector type
  };

比如这样:

int main() {
    Value* val1 = ConstantFP::get(theContext, APFloat(3.2));
    Type* t = val1->getType();    if (t->isDoubleTy()) {        std::cout << "val1 is typed as double(" << t->getTypeID() <<")\n";
    }
    system("pause");    return 0;
}

除此之外llvm::Type还有很多成员函数,详细请参见http://llvm.org/doxygen/classllvm_1_1Type.html

多说一句,我们还可以对 llvm::Value 进行命名

  1. bool hasName() const

  2. std::string getName() const

  3. void setName(const std::string &Name)

llvm::Constant

llvm::Constant表示一个各种常量的基类,基于它派生出了ConstantInt 整型常量,ConstantFP 浮点型常量,ConstantArray 数组常量,ConstantStruct 结构体常量:

int main() {    // 构造一个32位,无符号的整型值,值为1024
    APInt ci = APInt(32, 1024);
    ConstantInt* intVal = ConstantInt::get(theContext, ci);    std::cout << "bit width:" << intVal->getBitWidth()
              << "\nvalue:" << intVal->getValue().toString(16, false);

    system("pause");    return 0;
}

原文出处:https://www.cnblogs.com/racaljk/p/9688336.html  

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消