File: ppc-dmf-types.c

package info (click to toggle)
llvm-toolchain-21 1%3A21.1.6-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,245,028 kB
  • sloc: cpp: 7,619,726; ansic: 1,434,018; asm: 1,058,748; python: 252,740; f90: 94,671; objc: 70,685; lisp: 42,813; pascal: 18,401; sh: 8,601; ml: 5,111; perl: 4,720; makefile: 3,675; awk: 3,523; javascript: 2,409; xml: 892; fortran: 770
file content (103 lines) | stat: -rw-r--r-- 4,292 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// RUN: %clang_cc1 -triple powerpc64le-unknown-unknown -fsyntax-only \
// RUN:   -target-cpu future %s -verify
// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -fsyntax-only \
// RUN:   -target-cpu future %s -verify

// The use of PPC MMA types is strongly restricted. Non-pointer MMA variables
// can only be declared in functions and a limited number of operations are
// supported on these types. This test case checks that invalid uses of MMA
// types are correctly prevented.

// vector dmr

// typedef
typedef __dmr1024 dmr_t;

// function argument
void testDmrArg1(__dmr1024 vdmr, int *ptr) { // expected-error {{invalid use of PPC MMA type}}
  __dmr1024 *vdmrp = (__dmr1024 *)ptr;
  *vdmrp = vdmr;
}

void testDmrArg2(const __dmr1024 vdmr, int *ptr) { // expected-error {{invalid use of PPC MMA type}}
  __dmr1024 *vdmrp = (__dmr1024 *)ptr;
  *vdmrp = vdmr;
}

void testDmrArg3(const dmr_t vdmr, int *ptr) { // expected-error {{invalid use of PPC MMA type}}
  __dmr1024 *vdmrp = (__dmr1024 *)ptr;
  *vdmrp = vdmr;
}

// function return
__dmr1024 testDmrRet1(int *ptr) { // expected-error {{invalid use of PPC MMA type}}
  __dmr1024 *vdmrp = (__dmr1024 *)ptr;
  return *vdmrp; // expected-error {{invalid use of PPC MMA type}}
}

const dmr_t testDmrRet4(int *ptr) { // expected-error {{invalid use of PPC MMA type}}
  __dmr1024 *vdmrp = (__dmr1024 *)ptr;
  return *vdmrp; // expected-error {{invalid use of PPC MMA type}}
}

// global
__dmr1024 globalvdmr;        // expected-error {{invalid use of PPC MMA type}}
const __dmr1024 globalvdmr2; // expected-error {{invalid use of PPC MMA type}}
__dmr1024 *globalvdmrp;
const __dmr1024 *const globalvdmrp2;
dmr_t globalvdmr_t; // expected-error {{invalid use of PPC MMA type}}

// struct field
struct TestDmrStruct {
  int a;
  float b;
  __dmr1024 c; // expected-error {{invalid use of PPC MMA type}}
  __dmr1024 *vq;
};

// operators
int testDmrOperators1(int *ptr) {
  __dmr1024 *vdmrp = (__dmr1024 *)ptr;
  __dmr1024 vdmr1 = *(vdmrp + 0);
  __dmr1024 vdmr2 = *(vdmrp + 1);
  __dmr1024 vdmr3 = *(vdmrp + 2);
  if (vdmr1) // expected-error {{statement requires expression of scalar type ('__dmr1024' invalid)}}
    *(vdmrp + 10) = vdmr1;
  if (!vdmr2) // expected-error {{invalid argument type '__dmr1024' to unary expression}}
    *(vdmrp + 11) = vdmr3;
  int c1 = vdmr1 && vdmr2; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}
  int c2 = vdmr2 == vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}
  int c3 = vdmr2 < vdmr1;  // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}
  return c1 || c2 || c3;
}

void testDmrOperators2(int *ptr) {
  __dmr1024 *vdmrp = (__dmr1024 *)ptr;
  __dmr1024 vdmr1 = *(vdmrp + 0);
  __dmr1024 vdmr2 = *(vdmrp + 1);
  __dmr1024 vdmr3 = *(vdmrp + 2);
  vdmr1 = -vdmr1;        // expected-error {{invalid argument type '__dmr1024' to unary expression}}
  vdmr2 = vdmr1 + vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}
  vdmr2 = vdmr2 * vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}
  vdmr3 = vdmr3 | vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}
  vdmr3 = vdmr3 << 2;    // expected-error {{invalid operands to binary expression ('__dmr1024' and 'int')}}
  *(vdmrp + 10) = vdmr1;
  *(vdmrp + 11) = vdmr2;
  *(vdmrp + 12) = vdmr3;
}

vector unsigned char testDmrOperators3(int *ptr) {
  __dmr1024 *vdmrp = (__dmr1024 *)ptr;
  __dmr1024 vdmr1 = *(vdmrp + 0);
  __dmr1024 vdmr2 = *(vdmrp + 1);
  __dmr1024 vdmr3 = *(vdmrp + 2);
  vdmr1 ? *(vdmrp + 10) = vdmr2 : *(vdmrp + 11) = vdmr3; // expected-error {{used type '__dmr1024' where arithmetic or pointer type is required}}
  vdmr2 = vdmr3;
  return vdmr2[1]; // expected-error {{subscripted value is not an array, pointer, or vector}}
}

void testDmrOperators4(int v, void *ptr) {
  __dmr1024 *vdmrp = (__dmr1024 *)ptr;
  __dmr1024 vdmr1 = (__dmr1024)v;   // expected-error {{used type '__dmr1024' where arithmetic or pointer type is required}}
  __dmr1024 vdmr2 = (__dmr1024)vdmrp; // expected-error {{used type '__dmr1024' where arithmetic or pointer type is required}}
}