小编Zek*_*eke的帖子

测试代码生成器优化

我已经为LLVM代码生成器后端编写了一个低级优化.基本上,优化将在基本块级重新排序汇编指令,以允许稍后(现有)优化更有效地优化结果代码.我想验证一些测试用例,我想对测试过程提出一些建议,因为这是我第一次尝试这样的测试.

到目前为止我考虑过的事情:

  1. 编译用C编写的基准测试,并检查使用该-S选项生成的ASM .我已经完成了这项工作,并将结果与​​我的优化结果进行了比较.这个方法让我看到我的优化工作,但即使我编写自定义的非可执行C文件,我也无法检查所有我想要的指令排序测试用例.

  2. 将基准编译到LLVM程序集,编辑它,然后将ASM降低到目标机器程序集.这可能有效,但是由于LLVM和目标ASM之间的抽象级别不同,我怀疑我能够通过攻击LLVM ASM来检查所有测试用例,直到它生成我想要的内容为止.

  3. 使用目标ASM测试用例作为LLVM的输入,并使用新的优化重新编译.我无法为LLVM或gcc(LLVM接受的大多数选项)找到一个选项来接受ASM作为输入.

在验证低级ASM编译器优化时,测试特定ASM测试用例的好策略是什么?LLVM(或gcc)是否有一些命令行选项可以使这个过程更容易?


编辑:为了澄清,我不是要求自动生成ASM测试用例; 我的问题是我有那些测试用例(例如,ASM_before.sreference_ASM_after.s),但我需要能够传入ASM_before.sLLVM并确保优化的输出ASM_after.s与已知的好reference_ASM_after.s.我正在寻找一种方法来做到这一点,而无需"反编译" ASM_before.s成高级语言,然后将其编译(优化)到ASM_after.s.

testing assembly gcc code-generation llvm

19
推荐指数
1
解决办法
871
查看次数

如何将stdout输出重定向到新的Vim选项卡?

我正在Vim中编辑XML文件,然后我想用xsltproc将它转换为纯文本文件,默认输出为stdout(类似于:!xsltproc TXTRULE.XSL%).是否可以将该xsltproc输出重定向到Vim中的新选项卡而无需创建任何中间文件?

(我试过阅读:帮助redir和一些wiki笔记,但仍然无法得到它.对于某种简单的例子会很有用.)

vim

18
推荐指数
1
解决办法
3445
查看次数

Python和C++构造函数之间的差异

我最近一直在学习更多关于Python的知识,并且当我通过优秀的Dive进入Python时,作者在这里指出该__init__方法在技术上不是构造函数,即使它通常像一个函数.

我有两个问题:

  1. C++如何构造对象和Python如何"构造"对象之间有什么区别?

  2. 什么使构造函数成为构造函数,以及该__init__方法如何不符合此条件?

c++ python constructor

14
推荐指数
1
解决办法
1764
查看次数

前瞻性类别,功能

当函数的前向声明在源文件(.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)

c++ visual-c++

10
推荐指数
2
解决办法
3万
查看次数

装配分析工具

有没有人对汇编文件分析工具有任何建议?我试图在传递-S选项时分析LLVM(或GCC)生成的ARM/Thumb-2 ASM文件.我对基本块级别的指令统计特别感兴趣,例如内存操作计数等.我可能最终在Python中使用我自己的工具,但很想知道在我开始之前是否有任何现有工具.

更新:我已经做了一些搜索,发现拆卸工具/十六进制编辑器的/ etc一个很好的资源在这里,但不幸的是它主要集中在x86汇编,也没有包括任何实际的汇编文件分析器.

assembly gcc code-analysis llvm

9
推荐指数
1
解决办法
2624
查看次数

如何在Python GUI中隐藏ttk Treeitem指标

我正在使用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.

python treeview ttk

6
推荐指数
1
解决办法
380
查看次数

使用JavaScript动态调用元素(锚点)

我将如何使用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.

html javascript jquery

5
推荐指数
1
解决办法
2478
查看次数

内联NOP未在LLVM中进行优化

我正在编写使用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)

assembly gcc arm llvm

5
推荐指数
1
解决办法
848
查看次数

ARM SUB指令操作数

我正在使用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字节腾出空间.

assembly arm

4
推荐指数
2
解决办法
2496
查看次数

.hgignore似乎没有工作

.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)

mercurial command-line tortoisehg hgignore

3
推荐指数
1
解决办法
1609
查看次数