blob: b3fd5497701f0b36eeffd0a919f8e4a6863be072 [file] [log] [blame]
Bill Schmidt9e6111a2012-12-17 04:20:17 +00001// REQUIRES: ppc64-registered-target
2// RUN: %clang_cc1 -triple powerpc64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s
3
4float crealf(_Complex float);
5double creal(_Complex double);
6long double creall(_Complex long double);
7
8_Complex float foo_float(_Complex float x) {
9 return x;
10}
11
Bill Wendlingc3af6792013-02-26 23:08:48 +000012// CHECK: define { float, float } @foo_float(float {{[%A-Za-z0-9.]+}}, float {{[%A-Za-z0-9.]+}}) [[NUW:#[0-9]+]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000013
14_Complex double foo_double(_Complex double x) {
15 return x;
16}
17
Bill Wendlingc3af6792013-02-26 23:08:48 +000018// CHECK: define { double, double } @foo_double(double {{[%A-Za-z0-9.]+}}, double {{[%A-Za-z0-9.]+}}) [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000019
20_Complex long double foo_long_double(_Complex long double x) {
21 return x;
22}
23
Bill Wendlingc3af6792013-02-26 23:08:48 +000024// CHECK: define { ppc_fp128, ppc_fp128 } @foo_long_double(ppc_fp128 {{[%A-Za-z0-9.]+}}, ppc_fp128 {{[%A-Za-z0-9.]+}}) [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000025
26_Complex int foo_int(_Complex int x) {
27 return x;
28}
29
Bill Wendlingc3af6792013-02-26 23:08:48 +000030// CHECK: define { i32, i32 } @foo_int(i32 {{[%A-Za-z0-9.]+}}, i32 {{[%A-Za-z0-9.]+}}) [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000031
32_Complex short foo_short(_Complex short x) {
33 return x;
34}
35
Bill Wendlingc3af6792013-02-26 23:08:48 +000036// CHECK: define { i16, i16 } @foo_short(i16 {{[%A-Za-z0-9.]+}}, i16 {{[%A-Za-z0-9.]+}}) [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000037
38_Complex signed char foo_char(_Complex signed char x) {
39 return x;
40}
41
Bill Wendlingc3af6792013-02-26 23:08:48 +000042// CHECK: define { i8, i8 } @foo_char(i8 {{[%A-Za-z0-9.]+}}, i8 {{[%A-Za-z0-9.]+}}) [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000043
44_Complex long foo_long(_Complex long x) {
45 return x;
46}
47
Bill Wendlingc3af6792013-02-26 23:08:48 +000048// CHECK: define { i64, i64 } @foo_long(i64 {{[%A-Za-z0-9.]+}}, i64 {{[%A-Za-z0-9.]+}}) [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000049
50_Complex long long foo_long_long(_Complex long long x) {
51 return x;
52}
53
Bill Wendlingc3af6792013-02-26 23:08:48 +000054// CHECK: define { i64, i64 } @foo_long_long(i64 {{[%A-Za-z0-9.]+}}, i64 {{[%A-Za-z0-9.]+}}) [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000055
56float bar_float(void) {
57 return crealf(foo_float(2.0f - 2.5fi));
58}
59
Bill Wendlingc3af6792013-02-26 23:08:48 +000060// CHECK: define float @bar_float() [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000061// CHECK: [[VAR1:[%A-Za-z0-9.]+]] = call { float, float } @foo_float
62// CHECK: extractvalue { float, float } [[VAR1]], 0
63// CHECK: extractvalue { float, float } [[VAR1]], 1
64
65double bar_double(void) {
66 return creal(foo_double(2.0 - 2.5i));
67}
68
Bill Wendlingc3af6792013-02-26 23:08:48 +000069// CHECK: define double @bar_double() [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000070// CHECK: [[VAR2:[%A-Za-z0-9.]+]] = call { double, double } @foo_double
71// CHECK: extractvalue { double, double } [[VAR2]], 0
72// CHECK: extractvalue { double, double } [[VAR2]], 1
73
74long double bar_long_double(void) {
75 return creall(foo_long_double(2.0L - 2.5Li));
76}
77
Bill Wendlingc3af6792013-02-26 23:08:48 +000078// CHECK: define ppc_fp128 @bar_long_double() [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000079// CHECK: [[VAR3:[%A-Za-z0-9.]+]] = call { ppc_fp128, ppc_fp128 } @foo_long_double
80// CHECK: extractvalue { ppc_fp128, ppc_fp128 } [[VAR3]], 0
81// CHECK: extractvalue { ppc_fp128, ppc_fp128 } [[VAR3]], 1
82
83int bar_int(void) {
84 return __real__(foo_int(2 - 3i));
85}
86
Bill Wendlingc3af6792013-02-26 23:08:48 +000087// CHECK: define signext i32 @bar_int() [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000088// CHECK: [[VAR4:[%A-Za-z0-9.]+]] = call { i32, i32 } @foo_int
89// CHECK: extractvalue { i32, i32 } [[VAR4]], 0
90// CHECK: extractvalue { i32, i32 } [[VAR4]], 1
91
92short bar_short(void) {
93 return __real__(foo_short(2 - 3i));
94}
95
Bill Wendlingc3af6792013-02-26 23:08:48 +000096// CHECK: define signext i16 @bar_short() [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +000097// CHECK: [[VAR5:[%A-Za-z0-9.]+]] = call { i16, i16 } @foo_short
98// CHECK: extractvalue { i16, i16 } [[VAR5]], 0
99// CHECK: extractvalue { i16, i16 } [[VAR5]], 1
100
101signed char bar_char(void) {
102 return __real__(foo_char(2 - 3i));
103}
104
Bill Wendlingc3af6792013-02-26 23:08:48 +0000105// CHECK: define signext i8 @bar_char() [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +0000106// CHECK: [[VAR6:[%A-Za-z0-9.]+]] = call { i8, i8 } @foo_char
107// CHECK: extractvalue { i8, i8 } [[VAR6]], 0
108// CHECK: extractvalue { i8, i8 } [[VAR6]], 1
109
110long bar_long(void) {
111 return __real__(foo_long(2L - 3Li));
112}
113
Bill Wendlingc3af6792013-02-26 23:08:48 +0000114// CHECK: define i64 @bar_long() [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +0000115// CHECK: [[VAR7:[%A-Za-z0-9.]+]] = call { i64, i64 } @foo_long
116// CHECK: extractvalue { i64, i64 } [[VAR7]], 0
117// CHECK: extractvalue { i64, i64 } [[VAR7]], 1
118
119long long bar_long_long(void) {
120 return __real__(foo_long_long(2LL - 3LLi));
121}
122
Bill Wendlingc3af6792013-02-26 23:08:48 +0000123// CHECK: define i64 @bar_long_long() [[NUW]] {
Bill Schmidt9e6111a2012-12-17 04:20:17 +0000124// CHECK: [[VAR8:[%A-Za-z0-9.]+]] = call { i64, i64 } @foo_long_long
125// CHECK: extractvalue { i64, i64 } [[VAR8]], 0
126// CHECK: extractvalue { i64, i64 } [[VAR8]], 1
127
Bill Wendlingf7a9da02013-02-20 07:22:19 +0000128
Bill Wendlingc3af6792013-02-26 23:08:48 +0000129// CHECK: attributes [[NUW]] = { nounwind{{.*}} }