1da54ff306270e179f64d046369419724356d30d7Akira Hatanaka// RUN: %clang -target mips64el-unknown-linux -ccc-clang-archs mips64el -O3 -S -mabi=n64 -o - -emit-llvm %s | FileCheck %s
2da54ff306270e179f64d046369419724356d30d7Akira Hatanaka
3da54ff306270e179f64d046369419724356d30d7Akira Hatanakaclass B0 {
4da54ff306270e179f64d046369419724356d30d7Akira Hatanaka  double d;
5da54ff306270e179f64d046369419724356d30d7Akira Hatanaka};
6da54ff306270e179f64d046369419724356d30d7Akira Hatanaka
7da54ff306270e179f64d046369419724356d30d7Akira Hatanakaclass D0 : public B0 {
8da54ff306270e179f64d046369419724356d30d7Akira Hatanaka  float f;
9da54ff306270e179f64d046369419724356d30d7Akira Hatanaka};
10da54ff306270e179f64d046369419724356d30d7Akira Hatanaka
11da54ff306270e179f64d046369419724356d30d7Akira Hatanakaclass B1 {
12da54ff306270e179f64d046369419724356d30d7Akira Hatanaka};
13da54ff306270e179f64d046369419724356d30d7Akira Hatanaka
14da54ff306270e179f64d046369419724356d30d7Akira Hatanakaclass D1 : public B1 {
15da54ff306270e179f64d046369419724356d30d7Akira Hatanaka  double d;
16da54ff306270e179f64d046369419724356d30d7Akira Hatanaka  float f;
17da54ff306270e179f64d046369419724356d30d7Akira Hatanaka};
18da54ff306270e179f64d046369419724356d30d7Akira Hatanaka
19a34e92116581531f7325527d952a9ffcc819d905Akira Hatanakaclass D2 : public B0 {
20a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka  double d2;
21a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka};
22a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka
23da54ff306270e179f64d046369419724356d30d7Akira Hatanakaextern D0 gd0;
24da54ff306270e179f64d046369419724356d30d7Akira Hatanakaextern D1 gd1;
25a34e92116581531f7325527d952a9ffcc819d905Akira Hatanakaextern D2 gd2;
26da54ff306270e179f64d046369419724356d30d7Akira Hatanaka
27da54ff306270e179f64d046369419724356d30d7Akira Hatanaka// CHECK: define { i64, i64 } @_Z4foo1v()
28da54ff306270e179f64d046369419724356d30d7Akira HatanakaD0 foo1(void) {
29da54ff306270e179f64d046369419724356d30d7Akira Hatanaka  return gd0;
30da54ff306270e179f64d046369419724356d30d7Akira Hatanaka}
31da54ff306270e179f64d046369419724356d30d7Akira Hatanaka
32da54ff306270e179f64d046369419724356d30d7Akira Hatanaka// CHECK: define { double, float } @_Z4foo2v()
33da54ff306270e179f64d046369419724356d30d7Akira HatanakaD1 foo2(void) {
34da54ff306270e179f64d046369419724356d30d7Akira Hatanaka  return gd1;
35da54ff306270e179f64d046369419724356d30d7Akira Hatanaka}
36da54ff306270e179f64d046369419724356d30d7Akira Hatanaka
37a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka// CHECK: define void @_Z4foo32D2(i64 %a0.coerce0, double %a0.coerce1)
38a34e92116581531f7325527d952a9ffcc819d905Akira Hatanakavoid foo3(D2 a0) {
39a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka  gd2 = a0;
40a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka}
41a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka
4291338cf4129cfdb85af7e9ef396ab09621da10ecAkira Hatanaka// CHECK: define void @_Z4foo42D0(i64 %a0.coerce0, i64 %a0.coerce1)
43a34e92116581531f7325527d952a9ffcc819d905Akira Hatanakavoid foo4(D0 a0) {
44a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka  gd0 = a0;
45a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka}
46a34e92116581531f7325527d952a9ffcc819d905Akira Hatanaka
47