x86_64-arguments.c revision 55a759b8bb52e9d74c92e17543780751c5e5c5ec
1d7d5f0223bd30dfd618762349c6209dd1d5ea3e6Daniel Dunbar// RUN: clang-cc -triple x86_64-unknown-unknown -emit-llvm -o %t %s && 2644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar// RUN: grep 'define signext i8 @f0()' %t && 3644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar// RUN: grep 'define signext i16 @f1()' %t && 4644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar// RUN: grep 'define i32 @f2()' %t && 5644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar// RUN: grep 'define float @f3()' %t && 6644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar// RUN: grep 'define double @f4()' %t && 7644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar// RUN: grep 'define x86_fp80 @f5()' %t && 8730f909e146b0ac5dbcf9b8be65cb8f82c68d883Anders Carlsson// RUN: grep 'define void @f6(i8 signext %a0, i16 signext %a1, i32 %a2, i64 %a3, i8\* %a4)' %t && 9100f402451da96f74ea58b1f49fc53b4fa149a57Daniel Dunbar// RUN: grep 'define void @f7(i32 %a0)' %t && 108d5053c8642db9cdf37d3cf56e712f24b8d57b1fDaniel Dunbar// RUN: grep '.0 = type { i64, double }' %t && 11100f402451da96f74ea58b1f49fc53b4fa149a57Daniel Dunbar// RUN: grep 'define .0 @f8_1()' %t && 128236bf1800641d1c296579e25218f68f74c5caacDaniel Dunbar// RUN: grep 'define void @f8_2(.0)' %t && 13644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar 14644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbarchar f0(void) { 15c36541e7bfa69cc63e2668a986bc99117559c545Mike Stump return 0; 16644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar} 17644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar 18644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbarshort f1(void) { 19c36541e7bfa69cc63e2668a986bc99117559c545Mike Stump return 0; 20644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar} 21644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar 22644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbarint f2(void) { 23c36541e7bfa69cc63e2668a986bc99117559c545Mike Stump return 0; 24644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar} 25644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar 26644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbarfloat f3(void) { 27c36541e7bfa69cc63e2668a986bc99117559c545Mike Stump return 0; 28644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar} 29644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar 30644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbardouble f4(void) { 31c36541e7bfa69cc63e2668a986bc99117559c545Mike Stump return 0; 32644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar} 33644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar 34644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbarlong double f5(void) { 35c36541e7bfa69cc63e2668a986bc99117559c545Mike Stump return 0; 36644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar} 37644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar 38644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbarvoid f6(char a0, short a1, int a2, long long a3, void *a4) { 39644f4c3fe4130c7be75d6191340ba8d857ba0730Daniel Dunbar} 40730f909e146b0ac5dbcf9b8be65cb8f82c68d883Anders Carlsson 41730f909e146b0ac5dbcf9b8be65cb8f82c68d883Anders Carlssontypedef enum { A, B, C } E; 42730f909e146b0ac5dbcf9b8be65cb8f82c68d883Anders Carlsson 43730f909e146b0ac5dbcf9b8be65cb8f82c68d883Anders Carlssonvoid f7(E a0) { 444b87142aba52c76ff9ed7c9c2fe0067bd935a2f4Mike Stump} 45100f402451da96f74ea58b1f49fc53b4fa149a57Daniel Dunbar 46100f402451da96f74ea58b1f49fc53b4fa149a57Daniel Dunbar// Test merging/passing of upper eightbyte with X87 class. 47100f402451da96f74ea58b1f49fc53b4fa149a57Daniel Dunbarunion u8 { 48100f402451da96f74ea58b1f49fc53b4fa149a57Daniel Dunbar long double a; 49100f402451da96f74ea58b1f49fc53b4fa149a57Daniel Dunbar int b; 50100f402451da96f74ea58b1f49fc53b4fa149a57Daniel Dunbar}; 51c36541e7bfa69cc63e2668a986bc99117559c545Mike Stumpunion u8 f8_1() { while (1) {} } 52100f402451da96f74ea58b1f49fc53b4fa149a57Daniel Dunbarvoid f8_2(union u8 a0) {} 538236bf1800641d1c296579e25218f68f74c5caacDaniel Dunbar 548236bf1800641d1c296579e25218f68f74c5caacDaniel Dunbar// RUN: grep 'define i64 @f9()' %t && 55c36541e7bfa69cc63e2668a986bc99117559c545Mike Stumpstruct s9 { int a; int b; int : 0; } f9(void) { while (1) {} } 568236bf1800641d1c296579e25218f68f74c5caacDaniel Dunbar 578236bf1800641d1c296579e25218f68f74c5caacDaniel Dunbar// RUN: grep 'define void @f10(i64)' %t && 588236bf1800641d1c296579e25218f68f74c5caacDaniel Dunbarstruct s10 { int a; int b; int : 0; }; 598236bf1800641d1c296579e25218f68f74c5caacDaniel Dunbarvoid f10(struct s10 a0) {} 608236bf1800641d1c296579e25218f68f74c5caacDaniel Dunbar 6120e95c5eb400c864bbd4421624fdf7b25ce70f56Daniel Dunbar// RUN: grep 'define void @f11(.union.anon. noalias sret .agg.result)' %t && 62c36541e7bfa69cc63e2668a986bc99117559c545Mike Stumpunion { long double a; float b; } f11() { while (1) {} } 6320e95c5eb400c864bbd4421624fdf7b25ce70f56Daniel Dunbar 647ef455be9beb7a755d815bfbdc38d55d1ce59b86Daniel Dunbar// RUN: grep 'define i64 @f12_0()' %t && 657ef455be9beb7a755d815bfbdc38d55d1ce59b86Daniel Dunbar// RUN: grep 'define void @f12_1(i64)' %t && 667ef455be9beb7a755d815bfbdc38d55d1ce59b86Daniel Dunbarstruct s12 { int a __attribute__((aligned(16))); }; 67c36541e7bfa69cc63e2668a986bc99117559c545Mike Stumpstruct s12 f12_0(void) { while (1) {} } 687ef455be9beb7a755d815bfbdc38d55d1ce59b86Daniel Dunbarvoid f12_1(struct s12 a0) {} 697ef455be9beb7a755d815bfbdc38d55d1ce59b86Daniel Dunbar 703a5f5c57e0a262207f7cb721a60df3676ab5209fDaniel Dunbar// Check that sret parameter is accounted for when checking available integer 713a5f5c57e0a262207f7cb721a60df3676ab5209fDaniel Dunbar// registers. 723a5f5c57e0a262207f7cb721a60df3676ab5209fDaniel Dunbar// RUN: grep 'define void @f13(.struct.s13_0. noalias sret .agg.result, i32 .a, i32 .b, i32 .c, i32 .d, .struct.s13_1. byval .e, i32 .f)' %t && 733a5f5c57e0a262207f7cb721a60df3676ab5209fDaniel Dunbar 743a5f5c57e0a262207f7cb721a60df3676ab5209fDaniel Dunbarstruct s13_0 { long long f0[3]; }; 7555a759b8bb52e9d74c92e17543780751c5e5c5ecDaniel Dunbarstruct s13_1 { long long f0[2]; }; 763a5f5c57e0a262207f7cb721a60df3676ab5209fDaniel Dunbarstruct s13_0 f13(int a, int b, int c, int d, 7755a759b8bb52e9d74c92e17543780751c5e5c5ecDaniel Dunbar struct s13_1 e, int f) { while (1) {} } 783a5f5c57e0a262207f7cb721a60df3676ab5209fDaniel Dunbar 7986e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbar// RUN: grep 'define void @f14(.*, i8 signext .X)' %t && 8086e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbarvoid f14(int a, int b, int c, int d, int e, int f, 8186e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbar char X) {} 8286e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbar// RUN: grep 'define void @f15(.*, i8\* .X)' %t && 8386e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbarvoid f15(int a, int b, int c, int d, int e, int f, 8486e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbar void *X) {} 8586e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbar// RUN: grep 'define void @f16(.*, float .X)' %t && 8686e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbarvoid f16(float a, float b, float c, float d, float e, float f, float g, float h, 8786e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbar float X) {} 8886e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbar// RUN: grep 'define void @f17(.*, x86_fp80 .X)' %t && 8986e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbarvoid f17(float a, float b, float c, float d, float e, float f, float g, float h, 9086e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbar long double X) {} 9186e13eeb65397f7b64173523a40c742b2702364bDaniel Dunbar 92fdf4986c4c75514df428ed71d5942252f18e129bDaniel Dunbar// Check for valid coercion. 9355a759b8bb52e9d74c92e17543780751c5e5c5ecDaniel Dunbar// RUN: grep '.. = bitcast i64. .* to .struct.f18_s0.' %t && 9455a759b8bb52e9d74c92e17543780751c5e5c5ecDaniel Dunbar// RUN: grep '.. = load .struct.f18_s0. .., align 1' %t && 9555a759b8bb52e9d74c92e17543780751c5e5c5ecDaniel Dunbar// RUN: grep 'store .struct.f18_s0 .., .struct.f18_s0. .f18_arg1' %t && 9655a759b8bb52e9d74c92e17543780751c5e5c5ecDaniel Dunbarstruct f18_s0 { int f0; }; 9755a759b8bb52e9d74c92e17543780751c5e5c5ecDaniel Dunbarvoid f18(int a, struct f18_s0 f18_arg1) { while (1) {} } 98fdf4986c4c75514df428ed71d5942252f18e129bDaniel Dunbar 998236bf1800641d1c296579e25218f68f74c5caacDaniel Dunbar// RUN: true 100