mirror of
https://github.com/intel/llvm.git
synced 2026-01-28 01:04:49 +08:00
Now that the legacy PM is deprecated for the optimization pipeline, we can start deleting legacy PM tests. For tests that test both PMs, merge the RUN lines. Delete tests specific to the legacy PM.
34 lines
1.0 KiB
C++
34 lines
1.0 KiB
C++
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s
|
|
/// Check that we pass the member pointers indirectly for MinGW64
|
|
// RUN: %clang_cc1 %s -triple=x86_64-windows-gnu -emit-llvm -o - | FileCheck %s -check-prefix MINGW64
|
|
/// We should be able to optimize calls via the indirectly passed member pointers
|
|
// RUN: %clang_cc1 %s -triple=x86_64-windows-gnu -emit-llvm -O3 -o - | FileCheck %s
|
|
struct A {
|
|
virtual int vf1() { return 1; }
|
|
virtual int vf2() { return 2; }
|
|
};
|
|
|
|
int f(A* a, int (A::*fp)()) {
|
|
return (a->*fp)();
|
|
}
|
|
|
|
// CHECK-LABEL: define{{.*}} i32 @_Z2g1v()
|
|
// CHECK-NOT: }
|
|
// CHECK: ret i32 1
|
|
// MINGW64-LABEL: define dso_local i32 @_Z2g1v()
|
|
// MINGW64: call i32 @_Z1fP1AMS_FivE(%struct.A* %{{.*}}, { i64, i64 }* %{{.*}})
|
|
int g1() {
|
|
A a;
|
|
return f(&a, &A::vf1);
|
|
}
|
|
|
|
// CHECK-LABEL: define{{.*}} i32 @_Z2g2v()
|
|
// CHECK-NOT: }
|
|
// CHECK: ret i32 2
|
|
// MINGW64-LABEL: define dso_local i32 @_Z2g2v()
|
|
// MINGW64: call i32 @_Z1fP1AMS_FivE(%struct.A* %{{.*}}, { i64, i64 }* %{{.*}})
|
|
int g2() {
|
|
A a;
|
|
return f(&a, &A::vf2);
|
|
}
|