gpt4 book ai didi

testing - 编译器代码生成器验证

转载 作者:行者123 更新时间:2023-11-28 19:52:43 26 4
gpt4 key购买 nike

我正在为 LLVM 编译器开发一个新的后端。后端进展顺利,但我到了要验证代码生成器是否正常运行的地步。我有一个可用的处理器模拟器,它非常准确,我想用它来进行验证。

使用 LLVM-lit 对我来说似乎不是一个好的选择,因为无法将模拟器集成到测试过程中。

目前,我的测试策略涉及编写测试程序,我会尝试用这些程序检查尽可能多的语句。以下是检查算术的示例。

c = a + a;          
if (c != 6) return 4;
c = a + a + a;
if (c != 9) return 5;
// etc

我已经注意到很难找到尽可能多的极端情况。

这是验证代码生成器的明智方法吗?如果是这样,有人知道包含此类测试的现有项目吗?

最佳答案

您可以通过制作自己的 lit.cfg 脚本来做您想做的事,并添加其他定义来做您想做的事。例如,我为项目的不同目标交叉构建内容,ELLCC .我使用 QEMU 来运行测试。我修改后的 lit.site.cfg 的一部分看起来像:

config.substitutions.append( ('%microblazeecc', ' ' + config.ecc + ' ' +
'-target microblaze-ellcc-linux ') )
config.substitutions.append( ('%microblazeexx', ' ' + config.ecc + '++ ' +
'-target microblaze-ellcc-linux ') )
config.substitutions.append( ('%microblazerun', ' ' + ellcc + '/bin/qemu-microblaze ') )

典型的测试用例如下所示:

// Compile and run for every target.
// RUN: %armexx -o %t %s && %armrun %t | FileCheck -check-prefix=CHECK %s
// RUN: %armebexx -o %t %s && %armebrun %t | FileCheck -check-prefix=CHECK %s
// RUN: %i386exx -o %t %s && %i386run %t | FileCheck -check-prefix=CHECK %s
// RUN: %microblazeexx -o %t %s && %microblazerun %t | FileCheck -check-prefix=CHECK %s
// RUN: %mipsexx -o %t %s && %mipsrun %t | FileCheck -check-prefix=CHECK %s
// RUN: %mipselexx -o %t %s && %mipselrun %t | FileCheck -check-prefix=CHECK %s
// RUN: %ppcexx -o %t %s && %ppcrun %t | FileCheck -check-prefix=CHECK %s
// FAIL: %ppc64exx -o %t %s && %ppc64run %t | FileCheck -check-prefix=CHECK %s
// RUN: %x86_64exx -o %t %s && %x86_64run %t | FileCheck -check-prefix=CHECK %s
// CHECK: foo.i = 10
// CHECK: bye
#include <cstdio>

class Foo {
int i;
public:
Foo(int i) : i(i) { }
int get() { return i; }
~Foo() { printf("bye\n"); }
};

int main(int argc, char** argv)
{
Foo foo(10);
printf("foo.i = %d\n", foo.get());
}

您可以使用 FileCheck 来查找您感兴趣的输出。

关于testing - 编译器代码生成器验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com