tingwang updated this revision to Diff 466708. tingwang added a comment. Rebase on opaque-pointers test case changes && Gentle ping.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D133488/new/ https://reviews.llvm.org/D133488 Files: clang/test/CodeGen/PowerPC/ppc64-align-struct.c Index: clang/test/CodeGen/PowerPC/ppc64-align-struct.c =================================================================== --- clang/test/CodeGen/PowerPC/ppc64-align-struct.c +++ clang/test/CodeGen/PowerPC/ppc64-align-struct.c @@ -9,6 +9,7 @@ struct test5 { int x[17]; }; struct test6 { int x[17]; } __attribute__((aligned (16))); struct test7 { int x[17]; } __attribute__((aligned (32))); +struct test8 { char x; }; // CHECK: define{{.*}} void @test1(i32 noundef signext %x, i64 %y.coerce) void test1 (int x, struct test1 y) @@ -116,6 +117,22 @@ return y; } +// Error pattern will be fixed in https://reviews.llvm.org/D133338 +// CHECK: define{{.*}} void @test8va(ptr noalias sret(%struct.test8) align 1 %[[AGG_RESULT:.*]], i32 noundef signext %x, ...) +// CHECK: %[[CUR:[^ ]+]] = load ptr, ptr %ap +// CHECK: %[[NEXT:[^ ]+]] = getelementptr inbounds i8, ptr %[[CUR]], i64 8 +// CHECK: store ptr %[[NEXT]], ptr %ap +// CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %[[AGG_RESULT]], ptr align 8 %[[CUR]], i64 1, i1 false) +struct test8 test8va (int x, ...) +{ + struct test8 y; + va_list ap; + va_start(ap, x); + y = va_arg (ap, struct test8); + va_end(ap); + return y; +} + // CHECK: define{{.*}} void @testva_longdouble(ptr noalias sret(%struct.test_longdouble) align 16 %[[AGG_RESULT:.*]], i32 noundef signext %x, ...) // CHECK: %[[CUR:[^ ]+]] = load ptr, ptr %ap // CHECK: %[[NEXT:[^ ]+]] = getelementptr inbounds i8, ptr %[[CUR]], i64 16
Index: clang/test/CodeGen/PowerPC/ppc64-align-struct.c =================================================================== --- clang/test/CodeGen/PowerPC/ppc64-align-struct.c +++ clang/test/CodeGen/PowerPC/ppc64-align-struct.c @@ -9,6 +9,7 @@ struct test5 { int x[17]; }; struct test6 { int x[17]; } __attribute__((aligned (16))); struct test7 { int x[17]; } __attribute__((aligned (32))); +struct test8 { char x; }; // CHECK: define{{.*}} void @test1(i32 noundef signext %x, i64 %y.coerce) void test1 (int x, struct test1 y) @@ -116,6 +117,22 @@ return y; } +// Error pattern will be fixed in https://reviews.llvm.org/D133338 +// CHECK: define{{.*}} void @test8va(ptr noalias sret(%struct.test8) align 1 %[[AGG_RESULT:.*]], i32 noundef signext %x, ...) +// CHECK: %[[CUR:[^ ]+]] = load ptr, ptr %ap +// CHECK: %[[NEXT:[^ ]+]] = getelementptr inbounds i8, ptr %[[CUR]], i64 8 +// CHECK: store ptr %[[NEXT]], ptr %ap +// CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %[[AGG_RESULT]], ptr align 8 %[[CUR]], i64 1, i1 false) +struct test8 test8va (int x, ...) +{ + struct test8 y; + va_list ap; + va_start(ap, x); + y = va_arg (ap, struct test8); + va_end(ap); + return y; +} + // CHECK: define{{.*}} void @testva_longdouble(ptr noalias sret(%struct.test_longdouble) align 16 %[[AGG_RESULT:.*]], i32 noundef signext %x, ...) // CHECK: %[[CUR:[^ ]+]] = load ptr, ptr %ap // CHECK: %[[NEXT:[^ ]+]] = getelementptr inbounds i8, ptr %[[CUR]], i64 16
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits