1481bb44bSJonas Paulsson // RUN: %clang_cc1 -triple s390x-ibm-linux -emit-llvm -fzvector -o - %s 2>&1 \ 2481bb44bSJonas Paulsson // RUN: | FileCheck %s 3481bb44bSJonas Paulsson // 4481bb44bSJonas Paulsson // Test that the "s390x-visible-vector-ABI" module flag is not emitted. 5481bb44bSJonas Paulsson 6481bb44bSJonas Paulsson // Use of va_arg with a scalar type. 7481bb44bSJonas Paulsson #include <stdarg.h> fun0(va_list vl)8481bb44bSJonas Paulssonint fun0(va_list vl) { 9481bb44bSJonas Paulsson return va_arg(vl, int); 10481bb44bSJonas Paulsson } 11481bb44bSJonas Paulsson 12481bb44bSJonas Paulsson typedef __attribute__((vector_size(16))) int v4i32; 13481bb44bSJonas Paulsson 14481bb44bSJonas Paulsson // Declaring unused global function with vector argument and return values; 15481bb44bSJonas Paulsson v4i32 globfun(v4i32 Arg); 16481bb44bSJonas Paulsson 17481bb44bSJonas Paulsson // Declaring global scalar variable used below. 18481bb44bSJonas Paulsson int GlobVal; 19481bb44bSJonas Paulsson 20481bb44bSJonas Paulsson // Declaring extern global scalar variable used below. 21481bb44bSJonas Paulsson extern int GlobExtVar; 22481bb44bSJonas Paulsson 23481bb44bSJonas Paulsson // Local vector variable used below. 24481bb44bSJonas Paulsson static v4i32 Var; 25481bb44bSJonas Paulsson 26481bb44bSJonas Paulsson // Local function with vector argument and return values; foo(v4i32 Arg)27481bb44bSJonas Paulssonstatic v4i32 foo(v4i32 Arg) { 28481bb44bSJonas Paulsson Var = Var + Arg; 29481bb44bSJonas Paulsson return Var; 30481bb44bSJonas Paulsson } 31481bb44bSJonas Paulsson fun1()32481bb44bSJonas Paulssonint fun1() { 33481bb44bSJonas Paulsson v4i32 V = {1, 2, 3, 4}; 34481bb44bSJonas Paulsson return foo(V)[0] + GlobVal + GlobExtVar; 35481bb44bSJonas Paulsson } 36481bb44bSJonas Paulsson 37*0eff46f8SJonas Paulsson // Globally visible vector variable less than 16 bytes in size. 38*0eff46f8SJonas Paulsson typedef __attribute__((vector_size(8))) int v2i32; 39*0eff46f8SJonas Paulsson v2i32 NarrowVecVar; 40*0eff46f8SJonas Paulsson 41*0eff46f8SJonas Paulsson // Global function taking narrow vector array and pointer. bar(v2i32 VArr[4],v2i32 * Dst)42*0eff46f8SJonas Paulssonvoid bar(v2i32 VArr[4], v2i32 *Dst) { *Dst = VArr[3]; } 43*0eff46f8SJonas Paulsson 44*0eff46f8SJonas Paulsson // Wide vector parameters via "hidden" pointers. 45*0eff46f8SJonas Paulsson typedef __attribute__((vector_size(32))) int v8i32; bar2(v8i32 Arg)46*0eff46f8SJonas Paulssonv8i32 bar2(v8i32 Arg) { return Arg; } 47*0eff46f8SJonas Paulsson 48*0eff46f8SJonas Paulsson // Same but with a single element struct. 49*0eff46f8SJonas Paulsson struct SingleElStruct { v8i32 B; }; bar3(struct SingleElStruct Arg)50*0eff46f8SJonas Paulssonstruct SingleElStruct bar3(struct SingleElStruct Arg) { return Arg; } 51*0eff46f8SJonas Paulsson 52*0eff46f8SJonas Paulsson 53481bb44bSJonas Paulsson //CHECK-NOT: !{i32 2, !"s390x-visible-vector-ABI", i32 1} 54