我已经为LLVM代码生成器后端编写了一个低级优化.基本上,优化将在基本块级重新排序汇编指令,以允许稍后(现有)优化更有效地优化结果代码.我想验证一些测试用例,我想对测试过程提出一些建议,因为这是我第一次尝试这样的测试.
到目前为止我考虑过的事情:
编译用C编写的基准测试,并检查使用该-S
选项生成的ASM .我已经完成了这项工作,并将结果与我的优化结果进行了比较.这个方法让我看到我的优化工作,但即使我编写自定义的非可执行C文件,我也无法检查所有我想要的指令排序测试用例.
将基准编译到LLVM程序集,编辑它,然后将ASM降低到目标机器程序集.这可能有效,但是由于LLVM和目标ASM之间的抽象级别不同,我怀疑我能够通过攻击LLVM ASM来检查所有测试用例,直到它生成我想要的内容为止.
使用目标ASM测试用例作为LLVM的输入,并使用新的优化重新编译.我无法为LLVM或gcc(LLVM接受的大多数选项)找到一个选项来接受ASM作为输入.
在验证低级ASM编译器优化时,测试特定ASM测试用例的好策略是什么?LLVM(或gcc)是否有一些命令行选项可以使这个过程更容易?
编辑:为了澄清,我不是要求自动生成ASM测试用例; 我的问题是我有那些测试用例(例如,ASM_before.s
和reference_ASM_after.s
),但我需要能够传入ASM_before.s
LLVM并确保优化的输出ASM_after.s
与已知的好reference_ASM_after.s
.我正在寻找一种方法来做到这一点,而无需"反编译" ASM_before.s
成高级语言,然后将其编译(优化)到ASM_after.s
.
我正在Vim中编辑XML文件,然后我想用xsltproc将它转换为纯文本文件,默认输出为stdout(类似于:!xsltproc TXTRULE.XSL%).是否可以将该xsltproc输出重定向到Vim中的新选项卡而无需创建任何中间文件?
(我试过阅读:帮助redir和一些wiki笔记,但仍然无法得到它.对于某种简单的例子会很有用.)
我最近一直在学习更多关于Python的知识,并且当我通过优秀的Dive进入Python时,作者在这里指出该__init__
方法在技术上不是构造函数,即使它通常像一个函数.
我有两个问题:
C++如何构造对象和Python如何"构造"对象之间有什么区别?
什么使构造函数成为构造函数,以及该__init__
方法如何不符合此条件?
当函数的前向声明在源文件(.cpp)中工作时,为什么同样的不适用于类?
谢谢.
// main.cpp
void forwardDeclaredFunction() ; // This is correct
class One ; // Why this would be wrong
int One:: statVar = 10 ;
void
One :: anyAccess() {
std::cout << "\n statVar:\t " << statVar ;
std::cout << "\n classVar:\t" << classVar ;
}
class One {
public:
void anyAccess() ;
static int statVar ;
private:
int classVar ;
} ;
int main (int argc, char * const argv[]) {
One *obj = new One ;
return …
Run Code Online (Sandbox Code Playgroud) 有没有人对汇编文件分析工具有任何建议?我试图在传递-S选项时分析LLVM(或GCC)生成的ARM/Thumb-2 ASM文件.我对基本块级别的指令统计特别感兴趣,例如内存操作计数等.我可能最终在Python中使用我自己的工具,但很想知道在我开始之前是否有任何现有工具.
更新:我已经做了一些搜索,发现拆卸工具/十六进制编辑器的/ etc一个很好的资源在这里,但不幸的是它主要集中在x86汇编,也没有包括任何实际的汇编文件分析器.
我正在使用ttk treeviews构建一个Python GUI应用程序.在Linux上,当Treeitem具有子项时,它会显示一个箭头以显示该行可以展开.我想隐藏这个指示箭头(我正在使用其他方法来暗示可以扩展该行).我怎样才能做到这一点?
如果我运行,Style().element_names()
我会看到有一个Treeview元素和一个Treeitem.indicator元素.如果我运行Style().configure("Treeview", padding=50)
,我会在创建树视图时看到填充样式被应用,所以我确信我正确应用于Treeitem.indicator的任何样式也应该是可见的.
跑步Style().element_options("Treeitem.indicator")
,我明白了('-foreground', '-indicatorsize', '-indicatormargins')
.跑步Style().lookup("Treeitem.indicator", "foreground")
给了我"#000000"
,所以似乎值已初始化.如果我尝试Style().configure("Treeview", foreground="#123456")
我没有看到指示箭头改变颜色,虽然跑步Style.lookup("Treeitem.indicator", "foreground")
显示我"#123456"
按预期.我的计划是将indicatorsize设置为0以使箭头完全消失,但我甚至无法成功编辑颜色.我在这里做错了什么,是否有更好的隐藏指标的方法?如果重要,我正在运行Python 3.5.0.
我将如何使用JavaScript获取锚标记的文本.我知道如何通过在标签上附加一个ID来做到这一点,但我想知道是否还有使用"this"关键字来做到这一点.
示例HTML代码段:
<ul>
<li><a href="javascript:alertText(this);">Link One</a></li>
<li><a href="javascript:alertText(this);">Link Two</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
JavaScript功能:
function alertText(callingElement) {
alert(callingElement.text);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用(警报打印出"未定义")因为"this"关键字似乎指向Window对象而不是调用该函数的锚.
如果有必要,可以使用JQuery.
我正在编写使用GCC编译内联ARM程序集的概述中的示例.我使用llvm-gcc 4.2.1,而不是GCC,我正在编译以下C代码:
#include <stdio.h>
int main(void) {
printf("Volatile NOP\n");
asm volatile("mov r0, r0");
printf("Non-volatile NOP\n");
asm("mov r0, r0");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令:
llvm-gcc -emit-llvm -c -o compiled.bc input.c
llc -O3 -march=arm -o output.s compiled.bc
Run Code Online (Sandbox Code Playgroud)
我的输出.ARM ASM文件如下所示:
.syntax unified
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.file "compiled.bc"
.text
.globl main
.align 2
.type main,%function
main: @ @main
@ BB#0: @ %entry
str lr, [sp, #-4]!
sub sp, sp, #16
str …
Run Code Online (Sandbox Code Playgroud) 我正在使用llvm-clang编译器,在ARMv7-A处理器上编译简单的C函数到汇编.我想弄清楚这个指令的作用.
SUB sp, sp, #65, 30
Run Code Online (Sandbox Code Playgroud)
显然它正在为一些局部变量的堆栈指针腾出空间,但我从未见过带有四个操作数的ARM SUB指令.我猜测30会以某种方式修改#65,但我不知道如何,而且我无法在"ARM体系结构参考手册"中找到详细信息.有什么建议?
好奇的是,这是一个程序的开头,它创建了一个8 x 8整数的单位矩阵,所以我希望sp需要为堆栈上的至少8 x 8 x 4字节腾出空间.
.hgignore
我的项目的根目录中有一个文件,它没有蹲下.当我这样做时hg add
,我的项目目录中的每个文件都被添加和跟踪.无论我使用tortoisehg还是命令行,我都得到相同的结果.命令行是我的偏好.这里发生了什么?
我.hgignore
(取自关于SO的另一个问题):
# use glob syntax
syntax: glob
*.obj
*.pdb
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
*.lib
*.sbr
*.scc
[Bb]in
[Dd]ebug*/
obj/
[Rr]elease*/
_ReSharper*/
[Tt]humbs.db
[Tt]est[Rr]esult*
[Bb]uild[Ll]og.*
*.[Pp]ublish.xml
*.resharper
Run Code Online (Sandbox Code Playgroud) assembly ×4
gcc ×3
llvm ×3
arm ×2
c++ ×2
python ×2
command-line ×1
constructor ×1
hgignore ×1
html ×1
javascript ×1
jquery ×1
mercurial ×1
testing ×1
tortoisehg ×1
treeview ×1
ttk ×1
vim ×1
visual-c++ ×1