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