From: Richard Smith Date: Sun, 14 Jul 2013 06:18:38 +0000 (+0000) Subject: Make these tests more robust against IRgen choosing to emit more named metadata. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eb54d423d2e550324446c9d15fa2b2a92843cab5;p=clang Make these tests more robust against IRgen choosing to emit more named metadata. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186279 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/may-alias.c b/test/CodeGen/may-alias.c index c76724444b..10339a57d3 100644 --- a/test/CodeGen/may-alias.c +++ b/test/CodeGen/may-alias.c @@ -8,10 +8,10 @@ typedef int __attribute__((may_alias)) aliasing_int; void test0(aliasing_int *ai, int *i) { -// CHECK: store i32 0, i32* %{{.*}}, !tbaa !1 +// CHECK: store i32 0, i32* %{{.*}}, !tbaa [[TAG_CHAR:!.*]] // PATH: store i32 0, i32* %{{.*}}, !tbaa [[TAG_CHAR:!.*]] *ai = 0; -// CHECK: store i32 1, i32* %{{.*}}, !tbaa !3 +// CHECK: store i32 1, i32* %{{.*}}, !tbaa [[TAG_INT:!.*]] // PATH: store i32 1, i32* %{{.*}}, !tbaa [[TAG_INT:!.*]] *i = 1; } @@ -20,18 +20,17 @@ void test0(aliasing_int *ai, int *i) struct Test1 { int x; }; struct Test1MA { int x; } __attribute__((may_alias)); void test1(struct Test1MA *p1, struct Test1 *p2) { - // CHECK: store i32 2, i32* {{%.*}}, !tbaa !1 + // CHECK: store i32 2, i32* {{%.*}}, !tbaa [[TAG_CHAR]] // PATH: store i32 2, i32* {{%.*}}, !tbaa [[TAG_CHAR]] p1->x = 2; - // CHECK: store i32 3, i32* {{%.*}}, !tbaa !3 + // CHECK: store i32 3, i32* {{%.*}}, !tbaa [[TAG_INT]] // PATH: store i32 3, i32* {{%.*}}, !tbaa [[TAG_test1_x:!.*]] p2->x = 3; } - -// CHECK: !0 = metadata !{metadata !"any pointer", metadata !1} -// CHECK: !1 = metadata !{metadata !"omnipotent char", metadata !2} -// CHECK: !2 = metadata !{metadata !"Simple C/C++ TBAA"} -// CHECK: !3 = metadata !{metadata !"int", metadata !1} +// CHECK: metadata !{metadata !"any pointer", metadata [[TAG_CHAR]]} +// CHECK: [[TAG_CHAR]] = metadata !{metadata !"omnipotent char", metadata [[TAG_CXX_TBAA:!.*]]} +// CHECK: [[TAG_CXX_TBAA]] = metadata !{metadata !"Simple C/C++ TBAA"} +// CHECK: [[TAG_INT]] = metadata !{metadata !"int", metadata [[TAG_CHAR]]} // PATH: [[TYPE_CHAR:!.*]] = metadata !{metadata !"omnipotent char", metadata !{{.*}} // PATH: [[TAG_CHAR]] = metadata !{metadata [[TYPE_CHAR]], metadata [[TYPE_CHAR]], i64 0} diff --git a/test/CodeGen/mips-constraints-mem.c b/test/CodeGen/mips-constraints-mem.c index ea6bcaff97..2c3c01ac11 100644 --- a/test/CodeGen/mips-constraints-mem.c +++ b/test/CodeGen/mips-constraints-mem.c @@ -9,7 +9,7 @@ int foo() // 'R': An address that can be used in a non-macro load or stor' // This test will result in the higher and lower nibbles being // switched due to the lwl/lwr instruction pairs. - // CHECK: %{{[0-9]+}} = call i32 asm sideeffect "lwl $0, 1 + $1\0A\09lwr $0, 2 + $1\0A\09", "=r,*R"(i32* %{{[0-9,a-f]+}}) #1, !srcloc !0 + // CHECK: %{{[0-9]+}} = call i32 asm sideeffect "lwl $0, 1 + $1\0A\09lwr $0, 2 + $1\0A\09", "=r,*R"(i32* %{{[0-9,a-f]+}}) #1, int c = 0xffbbccdd; diff --git a/test/CodeGen/mips-inline-asm-modifiers.c b/test/CodeGen/mips-inline-asm-modifiers.c index 7c4ca2ce14..ac0c8e4dc3 100644 --- a/test/CodeGen/mips-inline-asm-modifiers.c +++ b/test/CodeGen/mips-inline-asm-modifiers.c @@ -5,8 +5,8 @@ int printf(const char*, ...); - // CHECK: %{{[0-9]+}} = call i32 asm ".set noreorder;\0Alw $0,$1;\0A.set reorder;\0A", "=r,*m"(i32* getelementptr inbounds ([8 x i32]* @b, i32 {{[0-9]+}}, i32 {{[0-9]+}})) #2, !srcloc !0 - // CHECK: %{{[0-9]+}} = call i32 asm "lw $0,${1:D};\0A", "=r,*m"(i32* getelementptr inbounds ([8 x i32]* @b, i32 {{[0-9]+}}, i32 {{[0-9]+}})) #2, !srcloc !1 + // CHECK: %{{[0-9]+}} = call i32 asm ".set noreorder;\0Alw $0,$1;\0A.set reorder;\0A", "=r,*m"(i32* getelementptr inbounds ([8 x i32]* @b, i32 {{[0-9]+}}, i32 {{[0-9]+}})) #2, + // CHECK: %{{[0-9]+}} = call i32 asm "lw $0,${1:D};\0A", "=r,*m"(i32* getelementptr inbounds ([8 x i32]* @b, i32 {{[0-9]+}}, i32 {{[0-9]+}})) #2, int b[8] = {0,1,2,3,4,5,6,7}; int main() { diff --git a/test/CodeGen/tbaa-class.cpp b/test/CodeGen/tbaa-class.cpp index 967ba19a04..a02bf9990e 100644 --- a/test/CodeGen/tbaa-class.cpp +++ b/test/CodeGen/tbaa-class.cpp @@ -52,8 +52,8 @@ public: uint32_t g(uint32_t *s, StructA *A, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32:!.*]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32:!.*]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32:!.*]] @@ -64,8 +64,8 @@ uint32_t g(uint32_t *s, StructA *A, uint64_t count) { uint32_t g2(uint32_t *s, StructA *A, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa !5 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_i16:!.*]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_A_f16:!.*]] @@ -76,8 +76,8 @@ uint32_t g2(uint32_t *s, StructA *A, uint64_t count) { uint32_t g3(StructA *A, StructB *B, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_B_a_f32:!.*]] @@ -88,8 +88,8 @@ uint32_t g3(StructA *A, StructB *B, uint64_t count) { uint32_t g4(StructA *A, StructB *B, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa !5 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_i16]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_B_a_f16:!.*]] @@ -100,8 +100,8 @@ uint32_t g4(StructA *A, StructB *B, uint64_t count) { uint32_t g5(StructA *A, StructB *B, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_B_f32:!.*]] @@ -112,8 +112,8 @@ uint32_t g5(StructA *A, StructB *B, uint64_t count) { uint32_t g6(StructA *A, StructB *B, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_B_a_f32_2:!.*]] @@ -124,8 +124,8 @@ uint32_t g6(StructA *A, StructB *B, uint64_t count) { uint32_t g7(StructA *A, StructS *S, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_S_f32:!.*]] @@ -136,8 +136,8 @@ uint32_t g7(StructA *A, StructS *S, uint64_t count) { uint32_t g8(StructA *A, StructS *S, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa !5 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_i16]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_S_f16:!.*]] @@ -148,8 +148,8 @@ uint32_t g8(StructA *A, StructS *S, uint64_t count) { uint32_t g9(StructS *S, StructS2 *S2, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_S_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_S_f32:!.*]] @@ -160,8 +160,8 @@ uint32_t g9(StructS *S, StructS2 *S2, uint64_t count) { uint32_t g10(StructS *S, StructS2 *S2, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_S_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_S2_f32_2:!.*]] @@ -172,8 +172,8 @@ uint32_t g10(StructS *S, StructS2 *S2, uint64_t count) { uint32_t g11(StructC *C, StructD *D, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_C_b_a_f32:!.*]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_D_b_a_f32:!.*]] @@ -184,8 +184,8 @@ uint32_t g11(StructC *C, StructD *D, uint64_t count) { uint32_t g12(StructC *C, StructD *D, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // TODO: differentiate the two accesses. // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_B_a_f32]] @@ -198,12 +198,12 @@ uint32_t g12(StructC *C, StructD *D, uint64_t count) { return b1->a.f32; } -// CHECK: !1 = metadata !{metadata !"omnipotent char", metadata !2} -// CHECK: !2 = metadata !{metadata !"Simple C/C++ TBAA"} -// CHECK: !4 = metadata !{metadata !"int", metadata !1} -// CHECK: !5 = metadata !{metadata !"short", metadata !1} +// CHECK: [[TAG_char:!.*]] = metadata !{metadata !"omnipotent char", metadata [[TAG_cxx_tbaa:!.*]]} +// CHECK: [[TAG_cxx_tbaa]] = metadata !{metadata !"Simple C/C++ TBAA"} +// CHECK: [[TAG_i32]] = metadata !{metadata !"int", metadata [[TAG_char]]} +// CHECK: [[TAG_i16]] = metadata !{metadata !"short", metadata [[TAG_char]]} -// PATH: [[TYPE_CHAR:!.*]] = metadata !{metadata !"omnipotent char", metadata !3 +// PATH: [[TYPE_CHAR:!.*]] = metadata !{metadata !"omnipotent char", metadata // PATH: [[TAG_i32]] = metadata !{metadata [[TYPE_INT:!.*]], metadata [[TYPE_INT]], i64 0} // PATH: [[TYPE_INT]] = metadata !{metadata !"int", metadata [[TYPE_CHAR]] // PATH: [[TAG_A_f32]] = metadata !{metadata [[TYPE_A:!.*]], metadata [[TYPE_INT]], i64 4} diff --git a/test/CodeGen/tbaa.cpp b/test/CodeGen/tbaa.cpp index 77133e473a..e1fc7a79be 100644 --- a/test/CodeGen/tbaa.cpp +++ b/test/CodeGen/tbaa.cpp @@ -46,8 +46,8 @@ typedef struct uint32_t g(uint32_t *s, StructA *A, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32:!.*]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32:!.*]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32:!.*]] @@ -58,8 +58,8 @@ uint32_t g(uint32_t *s, StructA *A, uint64_t count) { uint32_t g2(uint32_t *s, StructA *A, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa !5 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_i16:!.*]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_A_f16:!.*]] @@ -70,8 +70,8 @@ uint32_t g2(uint32_t *s, StructA *A, uint64_t count) { uint32_t g3(StructA *A, StructB *B, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_B_a_f32:!.*]] @@ -82,8 +82,8 @@ uint32_t g3(StructA *A, StructB *B, uint64_t count) { uint32_t g4(StructA *A, StructB *B, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa !5 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_i16]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_B_a_f16:!.*]] @@ -94,8 +94,8 @@ uint32_t g4(StructA *A, StructB *B, uint64_t count) { uint32_t g5(StructA *A, StructB *B, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_B_f32:!.*]] @@ -106,8 +106,8 @@ uint32_t g5(StructA *A, StructB *B, uint64_t count) { uint32_t g6(StructA *A, StructB *B, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_B_a_f32_2:!.*]] @@ -118,8 +118,8 @@ uint32_t g6(StructA *A, StructB *B, uint64_t count) { uint32_t g7(StructA *A, StructS *S, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_S_f32:!.*]] @@ -130,8 +130,8 @@ uint32_t g7(StructA *A, StructS *S, uint64_t count) { uint32_t g8(StructA *A, StructS *S, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa !5 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_i16]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_A_f32]] // PATH: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_S_f16:!.*]] @@ -142,8 +142,8 @@ uint32_t g8(StructA *A, StructS *S, uint64_t count) { uint32_t g9(StructS *S, StructS2 *S2, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_S_f32]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_S2_f32:!.*]] @@ -154,8 +154,8 @@ uint32_t g9(StructS *S, StructS2 *S2, uint64_t count) { uint32_t g10(StructS *S, StructS2 *S2, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa !5 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_i16]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_S_f32]] // PATH: store i16 4, i16* %{{.*}}, align 2, !tbaa [[TAG_S2_f16:!.*]] @@ -166,8 +166,8 @@ uint32_t g10(StructS *S, StructS2 *S2, uint64_t count) { uint32_t g11(StructC *C, StructD *D, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_C_b_a_f32:!.*]] // PATH: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_D_b_a_f32:!.*]] @@ -178,8 +178,8 @@ uint32_t g11(StructC *C, StructD *D, uint64_t count) { uint32_t g12(StructC *C, StructD *D, uint64_t count) { // CHECK: define i32 @{{.*}}( -// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa !4 -// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa !4 +// CHECK: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] +// CHECK: store i32 4, i32* %{{.*}}, align 4, !tbaa [[TAG_i32]] // TODO: differentiate the two accesses. // PATH: define i32 @{{.*}}( // PATH: store i32 1, i32* %{{.*}}, align 4, !tbaa [[TAG_B_a_f32]] @@ -203,7 +203,7 @@ struct five { char g13(struct five *a, struct five *b) { return a->b; // CHECK: define signext i8 @{{.*}}( -// CHECK: load i8* %{{.*}}, align 1, !tbaa !1 +// CHECK: load i8* %{{.*}}, align 1, !tbaa [[TAG_char:!.*]] // PATH: define signext i8 @{{.*}}( // PATH: load i8* %{{.*}}, align 1, !tbaa [[TAG_five_b:!.*]] } @@ -216,18 +216,18 @@ struct six { }; char g14(struct six *a, struct six *b) { // CHECK: define signext i8 @{{.*}}( -// CHECK: load i8* %{{.*}}, align 1, !tbaa !1 +// CHECK: load i8* %{{.*}}, align 1, !tbaa [[TAG_char]] // PATH: define signext i8 @{{.*}}( // PATH: load i8* %{{.*}}, align 1, !tbaa [[TAG_six_b:!.*]] return a->b; } -// CHECK: !1 = metadata !{metadata !"omnipotent char", metadata !2} -// CHECK: !2 = metadata !{metadata !"Simple C/C++ TBAA"} -// CHECK: !4 = metadata !{metadata !"int", metadata !1} -// CHECK: !5 = metadata !{metadata !"short", metadata !1} +// CHECK: [[TAG_char]] = metadata !{metadata !"omnipotent char", metadata [[TAG_cxx_tbaa:!.*]]} +// CHECK: [[TAG_cxx_tbaa]] = metadata !{metadata !"Simple C/C++ TBAA"} +// CHECK: [[TAG_i32]] = metadata !{metadata !"int", metadata [[TAG_char]]} +// CHECK: [[TAG_i16]] = metadata !{metadata !"short", metadata [[TAG_char]]} -// PATH: [[TYPE_CHAR:!.*]] = metadata !{metadata !"omnipotent char", metadata !3 +// PATH: [[TYPE_CHAR:!.*]] = metadata !{metadata !"omnipotent char", metadata // PATH: [[TAG_i32]] = metadata !{metadata [[TYPE_INT:!.*]], metadata [[TYPE_INT]], i64 0} // PATH: [[TYPE_INT]] = metadata !{metadata !"int", metadata [[TYPE_CHAR]] // PATH: [[TAG_A_f32]] = metadata !{metadata [[TYPE_A:!.*]], metadata [[TYPE_INT]], i64 4} diff --git a/test/CodeGenCXX/pr12251.cpp b/test/CodeGenCXX/pr12251.cpp index f3f2ec417e..261c558002 100644 --- a/test/CodeGenCXX/pr12251.cpp +++ b/test/CodeGenCXX/pr12251.cpp @@ -5,12 +5,12 @@ bool f(bool *x) { return *x; } // CHECK: define zeroext i1 @_Z1fPb -// CHECK: load i8* %{{.*}}, align 1, !range !0 +// CHECK: load i8* %{{[^ ]*}}, align 1, !range [[RANGE_i8_0_2:![^ ]*]] // Only enum-tests follow. Ensure that after the bool test, no further range // metadata shows up when strict enums are disabled. // NO-STRICT-ENUMS: define zeroext i1 @_Z1fPb -// NO-STRICT-ENUMS: load i8* %{{.*}}, align 1, !range !0 +// NO-STRICT-ENUMS: load i8* %{{[^ ]*}}, align 1, !range // NO-STRICT-ENUMS-NOT: !range enum e1 { }; @@ -18,77 +18,77 @@ e1 g1(e1 *x) { return *x; } // CHECK: define i32 @_Z2g1P2e1 -// CHECK: load i32* %x, align 4, !range !1 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_0_1:![^ ]*]] enum e2 { e2_a = 0 }; e2 g2(e2 *x) { return *x; } // CHECK: define i32 @_Z2g2P2e2 -// CHECK: load i32* %x, align 4, !range !1 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_0_1]] enum e3 { e3_a = 16 }; e3 g3(e3 *x) { return *x; } // CHECK: define i32 @_Z2g3P2e3 -// CHECK: load i32* %x, align 4, !range !2 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_0_32:![^ ]*]] enum e4 { e4_a = -16}; e4 g4(e4 *x) { return *x; } // CHECK: define i32 @_Z2g4P2e4 -// CHECK: load i32* %x, align 4, !range !3 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_m16_16:![^ ]*]] enum e5 { e5_a = -16, e5_b = 16}; e5 g5(e5 *x) { return *x; } // CHECK: define i32 @_Z2g5P2e5 -// CHECK: load i32* %x, align 4, !range !4 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_m32_32:![^ ]*]] enum e6 { e6_a = -1 }; e6 g6(e6 *x) { return *x; } // CHECK: define i32 @_Z2g6P2e6 -// CHECK: load i32* %x, align 4, !range !5 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_m1_1:![^ ]*]] enum e7 { e7_a = -16, e7_b = 2}; e7 g7(e7 *x) { return *x; } // CHECK: define i32 @_Z2g7P2e7 -// CHECK: load i32* %x, align 4, !range !3 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_m16_16]] enum e8 { e8_a = -17}; e8 g8(e8 *x) { return *x; } // CHECK: define i32 @_Z2g8P2e8 -// CHECK: load i32* %x, align 4, !range !4 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_m32_32:![^ ]*]] enum e9 { e9_a = 17}; e9 g9(e9 *x) { return *x; } // CHECK: define i32 @_Z2g9P2e9 -// CHECK: load i32* %x, align 4, !range !2 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_0_32]] enum e10 { e10_a = -16, e10_b = 32}; e10 g10(e10 *x) { return *x; } // CHECK: define i32 @_Z3g10P3e10 -// CHECK: load i32* %x, align 4, !range !6 +// CHECK: load i32* %x, align 4, !range [[RANGE_i32_m64_64:![^ ]*]] enum e11 {e11_a = 4294967296 }; enum e11 g11(enum e11 *x) { return *x; } // CHECK: define i64 @_Z3g11P3e11 -// CHECK: load i64* %x, align {{[84]}}, !range !7 +// CHECK: load i64* %x, align {{[84]}}, !range [[RANGE_i64_0_2pow33:![^ ]*]] enum e12 {e12_a = 9223372036854775808U }; enum e12 g12(enum e12 *x) { @@ -136,11 +136,11 @@ e16 g16(e16 *x) { // CHECK: ret -// CHECK: !0 = metadata !{i8 0, i8 2} -// CHECK: !1 = metadata !{i32 0, i32 1} -// CHECK: !2 = metadata !{i32 0, i32 32} -// CHECK: !3 = metadata !{i32 -16, i32 16} -// CHECK: !4 = metadata !{i32 -32, i32 32} -// CHECK: !5 = metadata !{i32 -1, i32 1} -// CHECK: !6 = metadata !{i32 -64, i32 64} -// CHECK: !7 = metadata !{i64 0, i64 8589934592} +// CHECK: [[RANGE_i8_0_2]] = metadata !{i8 0, i8 2} +// CHECK: [[RANGE_i32_0_1]] = metadata !{i32 0, i32 1} +// CHECK: [[RANGE_i32_0_32]] = metadata !{i32 0, i32 32} +// CHECK: [[RANGE_i32_m16_16]] = metadata !{i32 -16, i32 16} +// CHECK: [[RANGE_i32_m32_32]] = metadata !{i32 -32, i32 32} +// CHECK: [[RANGE_i32_m1_1]] = metadata !{i32 -1, i32 1} +// CHECK: [[RANGE_i32_m64_64]] = metadata !{i32 -64, i32 64} +// CHECK: [[RANGE_i64_0_2pow33]] = metadata !{i64 0, i64 8589934592}