// RUN: %clang_cc1 -triple s390x-ibm-linux -emit-llvm -fzvector -o - %s 2>&1 \ // RUN: | FileCheck %s // // Test that the "s390x-visible-vector-ABI" module flag is not emitted. // Use of va_arg with a scalar type. #include int fun0(va_list vl) { return va_arg(vl, int); } typedef __attribute__((vector_size(16))) int v4i32; // Declaring unused global function with vector argument and return values; v4i32 globfun(v4i32 Arg); // Declaring global scalar variable used below. int GlobVal; // Declaring extern global scalar variable used below. extern int GlobExtVar; // Local vector variable used below. static v4i32 Var; // Local function with vector argument and return values; static v4i32 foo(v4i32 Arg) { Var = Var + Arg; return Var; } int fun1() { v4i32 V = {1, 2, 3, 4}; return foo(V)[0] + GlobVal + GlobExtVar; } // Globally visible vector variable less than 16 bytes in size. typedef __attribute__((vector_size(8))) int v2i32; v2i32 NarrowVecVar; // Global function taking narrow vector array and pointer. void bar(v2i32 VArr[4], v2i32 *Dst) { *Dst = VArr[3]; } // Wide vector parameters via "hidden" pointers. typedef __attribute__((vector_size(32))) int v8i32; v8i32 bar2(v8i32 Arg) { return Arg; } // Same but with a single element struct. struct SingleElStruct { v8i32 B; }; struct SingleElStruct bar3(struct SingleElStruct Arg) { return Arg; } //CHECK-NOT: !{i32 2, !"s390x-visible-vector-ABI", i32 1}