From 6e0cba8d5500c7da4a91e55d576cb41ab1bd5bc5 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 25 Nov 2014 10:10:37 +0000 Subject: [PATCH] Update Clang tests that run the LLVM optimizer to reflect the changed canonicalization in r222748. No interesting functionality changed here. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222749 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/mips-varargs.c | 42 +++++++++-------------- test/CodeGenObjCXX/arc-cxx11-init-list.mm | 15 ++++---- 2 files changed, 24 insertions(+), 33 deletions(-) diff --git a/test/CodeGen/mips-varargs.c b/test/CodeGen/mips-varargs.c index e8b6e29002..30a6ea076a 100644 --- a/test/CodeGen/mips-varargs.c +++ b/test/CodeGen/mips-varargs.c @@ -33,13 +33,11 @@ int test_i32(char *fmt, ...) { // NEW: [[TMP0:%.+]] = bitcast i8** %va to i64** // NEW: [[AP_CUR:%.+]] = load i64** [[TMP0]], align [[PTRALIGN]] // -// O32: [[TMP1:%.+]] = getelementptr i32* [[AP_CUR]], i32 1 -// O32: [[AP_NEXT:%.+]] = bitcast i32* [[TMP1]] to i8* -// N32: [[TMP1:%.+]] = getelementptr i64* [[AP_CUR]], {{i32|i64}} 1 -// N64: [[TMP1:%.+]] = getelementptr i64* [[AP_CUR]], {{i32|i64}} 1 -// NEW: [[AP_NEXT:%.+]] = bitcast i64* [[TMP1]] to i8* +// O32: [[AP_NEXT:%.+]] = getelementptr i32* [[AP_CUR]], i32 1 +// NEW: [[AP_NEXT:%.+]] = getelementptr i64* [[AP_CUR]], {{i32|i64}} 1 // -// ALL: store i8* [[AP_NEXT]], i8** %va, align [[PTRALIGN]] +// O32: store i32* [[AP_NEXT]], i32** [[TMP0]], align [[PTRALIGN]] +// NEW: store i64* [[AP_NEXT]], i64** [[TMP0]], align [[PTRALIGN]] // // O32: [[ARG1:%.+]] = load i32* [[AP_CUR]], align 4 // NEW: [[TMP2:%.+]] = load i64* [[AP_CUR]], align 8 @@ -71,30 +69,25 @@ int test_i32_2args(char *fmt, ...) { // NEW: [[TMP0:%.+]] = bitcast i8** %va to i64** // NEW: [[AP_CUR:%.+]] = load i64** [[TMP0]], align [[PTRALIGN]] // -// O32: [[TMP1:%.+]] = getelementptr i32* [[AP_CUR]], i32 1 -// O32: [[AP_NEXT:%.+]] = bitcast i32* [[TMP1]] to i8* -// N32: [[TMP1:%.+]] = getelementptr i64* [[AP_CUR]], [[INTPTR_T:i32]] 1 -// FIXME: N32 optimised this bitcast out. Why only for this ABI? -// N64: [[TMP1:%.+]] = getelementptr i64* [[AP_CUR]], [[INTPTR_T:i64]] 1 -// N64: [[AP_NEXT:%.+]] = bitcast i64* [[TMP1]] to i8* +// O32: [[AP_NEXT1:%.+]] = getelementptr i32* [[AP_CUR]], i32 1 +// NEW: [[AP_NEXT1:%.+]] = getelementptr i64* [[AP_CUR]], [[INTPTR_T:i32|i64]] 1 // -// O32: store i8* [[AP_NEXT]], i8** %va, align [[PTRALIGN]] +// O32: store i32* [[AP_NEXT1]], i32** [[TMP0]], align [[PTRALIGN]] // FIXME: N32 optimised this store out. Why only for this ABI? -// N64: store i8* [[AP_NEXT]], i8** %va, align [[PTRALIGN]] +// N64: store i64* [[AP_NEXT1]], i64** [[TMP0]], align [[PTRALIGN]] // // O32: [[ARG1:%.+]] = load i32* [[AP_CUR]], align 4 // NEW: [[TMP3:%.+]] = load i64* [[AP_CUR]], align 8 // NEW: [[ARG1:%.+]] = trunc i64 [[TMP3]] to i32 // -// O32: [[TMP2:%.+]] = getelementptr i32* [[AP_CUR]], i32 2 -// O32: [[AP_NEXT:%.+]] = bitcast i32* [[TMP2]] to i8* -// NEW: [[TMP2:%.+]] = getelementptr i64* [[AP_CUR]], [[INTPTR_T]] 2 -// NEW: [[AP_NEXT:%.+]] = bitcast i64* [[TMP2]] to i8* +// O32: [[AP_NEXT2:%.+]] = getelementptr i32* [[AP_CUR]], i32 2 +// NEW: [[AP_NEXT2:%.+]] = getelementptr i64* [[AP_CUR]], [[INTPTR_T]] 2 // -// ALL: store i8* [[AP_NEXT]], i8** %va, align [[PTRALIGN]] +// O32: store i32* [[AP_NEXT2]], i32** [[TMP0]], align [[PTRALIGN]] +// NEW: store i64* [[AP_NEXT2]], i64** [[TMP0]], align [[PTRALIGN]] // -// O32: [[ARG2:%.+]] = load i32* [[TMP1]], align 4 -// NEW: [[TMP4:%.+]] = load i64* [[TMP1]], align 8 +// O32: [[ARG2:%.+]] = load i32* [[AP_NEXT1]], align 4 +// NEW: [[TMP4:%.+]] = load i64* [[AP_NEXT1]], align 8 // NEW: [[ARG2:%.+]] = trunc i64 [[TMP4]] to i32 // // ALL: call void @llvm.va_end(i8* [[VA1]]) @@ -131,11 +124,10 @@ long long test_i64(char *fmt, ...) { // O32: [[PTR4:%.+]] = inttoptr [[INTPTR_T]] [[PTR2]] to i8* // // O32: [[AP_NEXT:%.+]] = getelementptr i8* [[PTR4]], [[INTPTR_T]] 8 -// N32: [[TMP1:%.+]] = getelementptr i64* [[AP_CUR]], i32 1 -// N64: [[TMP1:%.+]] = getelementptr i64* [[AP_CUR]], i64 1 -// NEW: [[AP_NEXT:%.+]] = bitcast i64* [[TMP1]] to i8* +// NEW: [[AP_NEXT:%.+]] = getelementptr i64* [[AP_CUR]], [[INTPTR_T:i32|i64]] 1 // -// ALL: store i8* [[AP_NEXT]], i8** %va, align [[PTRALIGN]] +// O32: store i8* [[AP_NEXT]], i8** %va, align [[PTRALIGN]] +// NEW: store i64* [[AP_NEXT]], i64** [[TMP0]], align [[PTRALIGN]] // // O32: [[ARG1:%.+]] = load i64* [[PTR3]], align 8 // NEW: [[ARG1:%.+]] = load i64* [[AP_CUR]], align 8 diff --git a/test/CodeGenObjCXX/arc-cxx11-init-list.mm b/test/CodeGenObjCXX/arc-cxx11-init-list.mm index 7356b6e2a9..ee5e0bec14 100644 --- a/test/CodeGenObjCXX/arc-cxx11-init-list.mm +++ b/test/CodeGenObjCXX/arc-cxx11-init-list.mm @@ -22,15 +22,15 @@ void function(std::initializer_list); extern "C" void single() { function({ [I new] }); } // CHECK: [[INSTANCE:%.*]] = {{.*}} call {{.*}} i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* {{.*}}, i8* {{.*}}) -// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[INSTANCE]] to %0* -// CHECK-NEXT: store %0* [[CAST]], %0** [[ARRAY:%.*]], +// CHECK-NEXT: [[CAST:%.*]] = bitcast [{{[0-9]+}} x %0*]* %{{.*}} to i8** +// CHECK-NEXT: store i8* [[INSTANCE]], i8** [[CAST]], // CHECK: call {{.*}} void @objc_release(i8* {{.*}}) extern "C" void multiple() { function({ [I new], [I new] }); } // CHECK: [[INSTANCE:%.*]] = {{.*}} call {{.*}} i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* {{.*}}, i8* {{.*}}) -// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[INSTANCE]] to %0* -// CHECK-NEXT: store %0* [[CAST]], %0** [[ARRAY:%.*]], +// CHECK-NEXT: [[CAST:%.*]] = bitcast [{{[0-9]+}} x %0*]* %{{.*}} to i8** +// CHECK-NEXT: store i8* [[INSTANCE]], i8** [[CAST]], // CHECK: call {{.*}} void @objc_release(i8* {{.*}}) // CHECK-NEXT: icmp eq @@ -42,8 +42,8 @@ extern "C" void extended() { } // CHECK: [[INSTANCE:%.*]] = {{.*}} call {{.*}} i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* {{.*}}, i8* {{.*}}) -// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[INSTANCE:%.*]] to {{.*}}* -// CHECK-NEXT: store {{.*}}* [[CAST]], {{.*}}** {{.*}} +// CHECK-NEXT: [[CAST:%.*]] = bitcast [1 x %0*]* %{{.*}} to i8** +// CHECK-NEXT: store i8* [[INSTANCE]], i8** [[CAST]], // CHECK: {{.*}} call {{.*}} void @_Z8externalv() // CHECK: {{.*}} call {{.*}} void @objc_release(i8* {{.*}}) @@ -51,7 +51,6 @@ std::initializer_list il = { [I new] }; // CHECK: [[POOL:%.*]] = {{.*}} call {{.*}} i8* @objc_autoreleasePoolPush() // CHECK: [[INSTANCE:%.*]] = {{.*}} call {{.*}} i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* {{.*}}, i8* {{.*}}) -// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[INSTANCE]] to %0* -// CHECK-NEXT: store %0* [[CAST]], %0** getelementptr inbounds ([1 x %0*]* @_ZGR2il_, i32 0, i32 0) +// CHECK-NEXT: store i8* [[INSTANCE]], i8** bitcast ([1 x %0*]* @_ZGR2il_ to i8**) // CHECK: {{.*}} call {{.*}} void @objc_autoreleasePoolPop(i8* [[POOL]]) -- 2.50.1