[英]How to dump llvm::instruction while debugging
我想請問是否可以在調試時轉儲出某些指令的文本格式(我在vscode中使用gdb)? 我試過I->dump()和I->print(errs())但沒有用.... 因此我會撒謊問是否有可能這樣做? ...
[英]How to dump llvm::instruction while debugging
我想請問是否可以在調試時轉儲出某些指令的文本格式(我在vscode中使用gdb)? 我試過I->dump()和I->print(errs())但沒有用.... 因此我會撒謊問是否有可能這樣做? ...
[英]How can i Lifting x86_64 assembly code to LLVM-IR?
我正在研究病毒,我面臨着對其虛擬機進行去混淆處理的任務。 我選擇通過 LLVM 來執行此操作,我有一個問題,我在哪里可以看到將指令提升到 LLVM-IR 級別的簡單示例? 例如,我在哪里可以查看僅將一個 pop rsp 指令轉換為 LLVM-IR 的代碼? 因為我沒有找到類似的東西。 也許有人有描 ...
[英]Why does LLVM 10.0's GEP fail to compute address of a non-primitive field?
看看這段小代碼: 正如預期的那樣,這可以完美地編譯和運行。 但是,當我嘗試用一些非原始類型替換i32時,它會失敗並出現一條奇怪的error: base element of getelementptr must be sized LLVM版本 - 10.0 用llc編譯我試圖自己弄清楚,但我不知 ...
[英]Find pointer to the Instruction that assigns to value in LLVM
假設我有一個指向 LLVM 中某個 Value* val 的指針。 我想獲得一個指向指令的指針,該指令將值分配給 val 指向的變量。 我該怎么做? 這是代碼示例 我有一個指向變量add的指針,我想獲得一個指向分配給變量 add 的指令的指針,它是指向%add = add nsw i32 %aa, ...
[英]LLVM IR: struct alignment is wrong
我是 llvm 框架的新手,使用 llvm 生成 jit 代碼。 但是關於struct生成的代碼有點問題: ` 我認為 alloc 的結構對齊應該是 4,但這里是 8。 alloc IR 由 CreateAlloca() 發出如果有人能告訴我哪里出了問題,非常非常感謝。 謝謝! ...
[英]MLIR for multiplying 2 matrices
賞金將在 5 天后到期。 此問題的答案有資格獲得+50聲望賞金。 Roy想提請更多人注意這個問題。 我正在嘗試使用 MLIR 乘以 2 個矩陣。 但是,IR 不編譯並給出此錯誤: 錯誤發生在這一行( linalg.fill(%A, %cf1): memref<2048x2048xf64&g ...
[英]ML-IR to LLVM IR generates wrong IR
我正在按照這個玩具示例將 mlir 降低到 llvm ir 並編譯結果。 按照說明,我可以編譯項目。 但是,生成的 llvm ir(print.ll 文件)與 github 中的不同。 例如,我在 print.ll 中使用ptr而不是i8 * (示例: declare ptr @malloc(i6 ...
[英]Any options that enable loop inversion in LLVM?
是否有啟用循環反轉的選項? 更具體地說,LLVM 能否將 while 形式循環轉換為 do-while 形式循環,如下所示。 改造前代碼為: 改造后代碼為: 我使用了 opt pass 並啟用了 loop-rotate 選項和 loop-simplify 選項。 但是,沒有實現循環逆變換。 ...
[英]Can all LLVM frontends produce the same bytecode
LLVM 是 C#、Ruby、Zig 等多種語言的后端。 我的問題是:所有 LLVM 前端語言“原則上”都能生成相同的 LLVM 字節碼嗎? 前端是否有任何最低要求才能生成與 C++ 相同的字節碼? ...
[英][3.0]Question about how to use the store IR instruction to obtain the blockaddress
我寫信是想問一個問題。 在閱讀一段C程序生成的IR語言時,我發現在C程序中,獲取標簽地址的行為是在翻譯成IR后由store指令處理的。 但是,我閱讀了官方文檔。 Blockaddress 的工作原理如下: blockaddress(@function, %block) 'blockaddress ...
[英]Adding a new LLVM target to llvmlite
是否可以向 llvmlite(python 庫)添加新目標? 對於新硬件(例如 ASIC),我需要一個新的自定義 LLVM 目標。 這從文檔中不是很清楚。 如果無法在 llvmlite 中添加新目標,我可以在 llvmlite 中生成 IR 並使用其他方法執行 rest 嗎? ...
[英]How to add custom llvm pass into rustc
我正在嘗試將我的 llvm pass 添加到 Rustc 中。 Rustc 有一個編譯選項-C passes=val ,我們可以在其中添加額外的 LLVM passes 來運行。 然而,作為我的嘗試,這個選項只能在 pass code 放在 LLVM 代碼樹內時接受 pass,但我想將我的 pa ...
[英]Checking the top bits of an i64 Value in LLVM IR
我將簡明扼要,但如果需要進一步說明,請告訴我。 我有一個 i64 值,我想檢查它們的最高位是否為零。 如果它們是零,我會做一些事情,如果不是,我會做其他事情。 我如何檢測 IR 以允許在運行時發生這種情況? 我發現的一件事是 LLVM 有一個內在的“llvm.ctlz”,它計算前導零並將它們放入 i ...
[英]How to update and get the analysis result from a analysis pass after transform the function in the function transform pass
想知道在 function 被修改后,我們如何更新並獲得轉換過程中的分析結果。 我不希望 go 回到管道和 go 通過所有關於所有 function 的分析。這是低效的。 例如:寫一個pass修改function中的一些ir,然后分析pass得到結果再做transform。 ...
[英]How do I do jumps to a label in an enclosing function in LLVM IR?
我想為一種非常古老的語言 PL/M 做一個 LLVM 編譯器。 這有一些特殊的特性,尤其是嵌套函數能夠跳出封閉的 function。在偽代碼中: 這里的約束是: 只能跳到頂層function,幸好堆棧確實得到展開(該語言不支持析構函數,所以這很容易) 您不必在跳轉之前執行label處的語句(因此天 ...
[英]In LLVM, how to get all the struct types in a program?
在 LLVM 中,我們可以使用 StructType() 來獲取一個 Module 中的所有結構體,但是當我們使用多個源文件時,Modules 是不同的,所以同一個結構體類型可能會在不同的 Modules 中顯示多次。 如何獲取程序中的所有結構類型,而不僅僅是單個源文件? 是否有任何方法可以記錄結 ...
[英]LLVM IR for addition and subtraction
我使用“builder->CreateSub”和“builder->CreateAdd”來生成 LLVM-IR 用於減法和加法。 但是,LLVM (lli) 無法編譯/解釋生成的 IR(如下所示) 這給出了錯誤(在ptr上): ...
[英]eraseFromParent() vs removeFromParent() in llvm
我理解 eraseFromParent() 和 removeFromParent() 之間的區別在於前者從 BasicBlock 中取消鏈接並刪除指令,而后來只是取消鏈接但不刪除它。 我什么時候應該使用一個而不是另一個? 尋找一些示例場景。 ...
[英]How LLVM mem2reg pass works
mem2reg 是 llvm 中一個重要的優化通道。 我想了解這種優化是如何工作的,但沒有找到好的文章、書籍、教程和類似的東西。 我找到了這兩個鏈接: https://blog.katastros.com/a?ID=01300-3d6589c1-1993-4fb1-8975-939f10c205 ...
[英]How to linking a external function from a .h file (header file) for LLVM getOrInsertFunction in a LLVM pass
讓我們考慮一個名為 foo.h 的 header 文件 和一個名為 simple.c 的簡單程序 那么如何在instrumentation.cpp中編碼以鏈接該 foo.h 文件並獲取該 display() function 用於執行getOrInsertFunction("display", f ...