brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.9 KiB · 33cf0dd Raw
299 lines · c
1// RUN: %clang_cc1 -triple s390x-ibm-zos -emit-llvm -O2 < %s | FileCheck %s --check-prefix=X642 3#define PSA_PTR 0x004#define PSAAOLD 0x2245 6struct Foo {7  int * __ptr32 p32;8  int *p64;9  char *cp64;10};11 12void use_foo(struct Foo *f);13 14void ptr32_to_ptr(struct Foo *f, int * __ptr32 i) {15  // X64-LABEL: define void @ptr32_to_ptr(ptr noundef initializes((8, 16)) %f, ptr addrspace(1) noundef %i)16  // X64: %{{.+}} = addrspacecast ptr addrspace(1) %i to ptr17  f->p64= i;18  use_foo(f);19}20 21void ptr_to_ptr32(struct Foo *f, int *i) {22  // X64-LABEL: define void @ptr_to_ptr32(ptr noundef initializes((0, 4)) %f, ptr noundef %i)23  // X64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(1)24  f->p32 = i;25  use_foo(f);26}27 28void ptr32_to_ptr32(struct Foo *f, int * __ptr32 i) {29  // X64-LABEL: define void @ptr32_to_ptr32(ptr noundef initializes((0, 4)) %f, ptr addrspace(1) noundef %i)30  // X64-NOT: addrspacecast31  f->p32 = i;32  use_foo(f);33}34 35void ptr_to_ptr32_explicit_cast(struct Foo *f, int *i) {36  // X64-LABEL: define void @ptr_to_ptr32_explicit_cast(ptr noundef initializes((0, 4)) %f, ptr noundef %i)37  // X64: %{{.+}} = addrspacecast ptr %i to ptr addrspace(1)38  f->p32 = (int * __ptr32)i;39  use_foo(f);40}41 42void test_indexing(struct Foo *f) {43  // X64-LABEL: define void @test_indexing(ptr noundef initializes((16, 24)) %f)44  // X64: addrspacecast ptr addrspace(1) {{%[0-9]}} to ptr45  f->cp64 = ((char * __ptr32 *)1028)[1];46  use_foo(f);47}48 49void test_indexing_2(struct Foo *f) {50  // X64-LABEL: define void @test_indexing_2(ptr noundef initializes((16, 24)) %f)51  // X64: getelementptr inbounds nuw i8, ptr addrspace(1) {{%[0-9]}}, i32 1652  // X64: getelementptr inbounds nuw i8, ptr {{%[0-9]}}, i64 2453  f->cp64 = ((char *** __ptr32 *)1028)[1][2][3];54  use_foo(f);55}56 57unsigned long* test_misc() {58  // X64-LABEL: define ptr @test_misc()59  // X64: %arrayidx = getelementptr inbounds nuw i8, ptr addrspace(1) %0, i32 8860  // X64-NEXT: %1 = load ptr, ptr addrspace(1) %arrayidx61  // X64-NEXT: %arrayidx1 = getelementptr inbounds nuw i8, ptr %1, i64 862  // X64-NEXT: %2 = load ptr, ptr %arrayidx163  // X64-NEXT: %arrayidx2 = getelementptr inbounds nuw i8, ptr %2, i64 90464  // X64-NEXT: %3 = load ptr, ptr %arrayidx265  // X64-NEXT: %arrayidx3 = getelementptr inbounds nuw i8, ptr %3, i64 119266  unsigned long* x = (unsigned long*)((char***** __ptr32*)1208)[0][11][1][113][149];67  return x;68}69 70char* __ptr32* __ptr32 test_misc_2() {71  // X64-LABEL: define ptr addrspace(1) @test_misc_2()72  // X64: br i1 %cmp, label %if.then, label %if.end73  // X64: %1 = load ptr addrspace(1), ptr inttoptr (i64 16 to ptr)74  // X64-NEXT: %arrayidx = getelementptr inbounds nuw i8, ptr addrspace(1) %1, i32 54475  // X64-NEXT: %2 = load ptr addrspace(1), ptr addrspace(1) %arrayidx76  // X64-NEXT: %arrayidx1 = getelementptr inbounds nuw i8, ptr addrspace(1) %2, i32 2477  // X64-NEXT: %3 = load ptr addrspace(1), ptr addrspace(1) %arrayidx178  // X64-NEXT: store ptr addrspace(1) %3, ptr @test_misc_2.res79  // X64: ret ptr addrspace(1)80  static char* __ptr32* __ptr32 res = 0;81  if (res == 0) {82    res = ((char* __ptr32* __ptr32* __ptr32* __ptr32*)0)[4][136][6];83  }84  return res;85}86 87unsigned short test_misc_3() {88  // X64-LABEL: define zeroext i16 @test_misc_3()89  // X64: %0 = load ptr addrspace(1), ptr inttoptr (i64 548 to ptr)90  // X64-NEXT: %1 = addrspacecast ptr addrspace(1) %0 to ptr91  // X64-NEXT: %arrayidx = getelementptr inbounds nuw i8, ptr %1, i64 3692  // X64-NEXT: %2 = load i16, ptr %arrayidx, align 293  // X64-NEXT: ret i16 %294  unsigned short this_asid = ((unsigned short*)(*(char* __ptr32*)(0x224)))[18];95  return this_asid;96}97 98int test_misc_4() {99  // X64-LABEL: define signext range(i32 0, 2) i32 @test_misc_4()100  // X64: getelementptr inbounds nuw i8, ptr addrspace(1) {{%[0-9]}}, i32 88101  // X64: getelementptr inbounds nuw i8, ptr {{%[0-9]}}, i64 8102  // X64: getelementptr inbounds nuw i8, ptr {{%[0-9]}}, i64 984103  // X64: getelementptr inbounds nuw i8, ptr %3, i64 80104  // X64: icmp sgt i32 {{.*[0-9]}}, 67240703105  // X64: ret i32106  int a = (*(int*)(80 + ((char**** __ptr32*)1208)[0][11][1][123]) > 0x040202FF);107  return a;108}109 110void test_misc_5(struct Foo *f) {111  // X64-LABEL: define void @test_misc_5(ptr noundef initializes((16, 24)) %f)112  // X64: addrspacecast ptr addrspace(1) %0 to ptr113  f->cp64  = *(char* __ptr32 *)(PSA_PTR + PSAAOLD);114  use_foo(f);115}116 117int test_misc_6() {118  // X64-LABEL: define {{.*}} i32 @test_misc_6()119  // X64: ret i32 8120  int * __ptr32 ip32;121  int *ip64;122  ip64 = ip32;123  return sizeof(ip64);124}125 126int test_misc_7() {127  // X64-LABEL: define {{.*}} i32 @test_misc_7()128  // X64: ret i32 12129  int foo = 12;130 131  int *ip64;132  int * __ptr32 ip32;133 134  ip64 = &foo;135  ip32 = (int * __ptr32) ip64;136 137  return *ip32;138}139 140int test_misc_8() {141  // X64-LABEL: define {{.*}} i32 @test_misc_8()142  // X64: ret i32 97143  char foo = 'a';144 145  char *cp64;146  char * __ptr32 cp32;147 148  cp64 = &foo;149  cp32 = (char * __ptr32) cp64;150 151  return *cp32;152}153 154int test_misc_9() {155  // X64-LABEL: define {{.*}} i32 @test_misc_9()156  // X64: ret i32 15157  int foo = 15;158 159  int *ip64;160  int * __ptr32 ip32;161 162  ip32 = &foo;163  ip64 = (int *)ip32;164 165  return *ip64;166}167 168int test_misc_10() {169  // X64-LABEL: define {{.*}} i32 @test_misc_10()170  // X64: ret i32 97171  char foo = 'a';172 173  char *cp64;174  char * __ptr32 cp32;175 176  cp32 = &foo;177  cp64= (char *)cp32;178 179  return *cp64;180}181 182int test_function_ptr32_is_32bit() {183  // X64-LABEL: define {{.*}} i32 @test_function_ptr32_is_32bit()184  // X64: ret i32 4185  int (* __ptr32 a)(int a);186  return sizeof(a);187}188 189int get_processor_count() {190  // X64-LABEL: define signext range(i32 -128, 128) i32 @get_processor_count()191  // X64: load ptr addrspace(1), ptr inttoptr (i64 16 to ptr)192  // X64-NEXT: [[ARR_IDX1:%[a-z].*]] = getelementptr inbounds nuw i8, ptr addrspace(1) %0, i32 660193  // X64: load ptr addrspace(1), ptr addrspace(1) [[ARR_IDX1]]194  // X64: load i8, ptr addrspace(1) {{%[a-z].*}}195  // X64: sext i8 {{%[0-9]}} to i32196  // X64-NEXT: ret i32197  return ((char * __ptr32 * __ptr32 *)0)[4][165][53];198}199 200int get_sizes_ptr32() {201  // X64-LABEL: define {{.*}} i32 @get_sizes_ptr32()202  // X64: ret i32 72203  char * __ptr32 a;204  signed char * __ptr32 b;205  unsigned char *__ptr32 c;206  int * __ptr32 d;207  signed int * __ptr32 e;208  unsigned int *__ptr32 f;209  short * __ptr32 g;210  signed short * __ptr32 h;211  unsigned short * __ptr32 i;212  long * __ptr32 j;213  signed * __ptr32 k;214  unsigned * __ptr32 l;215  long long * __ptr32 m;216  signed long long * __ptr32 n;217  unsigned long long * __ptr32 o;218  float * __ptr32 p;219  double * __ptr32 q;220  long double * __ptr32 r;221 222  int sum = 0;223  sum += sizeof(a);224  sum += sizeof(b);225  sum += sizeof(c);226  sum += sizeof(d);227  sum += sizeof(e);228  sum += sizeof(f);229  sum += sizeof(g);230  sum += sizeof(h);231  sum += sizeof(i);232  sum += sizeof(j);233  sum += sizeof(k);234  sum += sizeof(l);235  sum += sizeof(m);236  sum += sizeof(n);237  sum += sizeof(o);238  sum += sizeof(p);239  sum += sizeof(q);240  sum += sizeof(r);241 242  return sum;243}244 245int get_sizes_p64() {246  // X64-LABEL: define {{.*}} i32 @get_sizes_p64()247  // X64: ret i32 144248  char *a;249  signed char *b;250  unsigned char *c;251  int *d;252  signed int *e;253  unsigned int *f;254  short *g;255  signed short *h;256  unsigned short *i;257  long *j;258  signed *k;259  unsigned *l;260  long long *m;261  signed long long *n;262  unsigned long long *o;263  float *p;264  double *q;265  long double *r;266 267  int sum = 0;268  sum += sizeof(a);269  sum += sizeof(b);270  sum += sizeof(c);271  sum += sizeof(d);272  sum += sizeof(e);273  sum += sizeof(f);274  sum += sizeof(g);275  sum += sizeof(h);276  sum += sizeof(i);277  sum += sizeof(j);278  sum += sizeof(k);279  sum += sizeof(l);280  sum += sizeof(m);281  sum += sizeof(n);282  sum += sizeof(o);283  sum += sizeof(p);284  sum += sizeof(q);285  sum += sizeof(r);286 287  return sum;288 289}290 291int host_cpu() {292  char *__ptr32 CVT = *(char * __ptr32 *__ptr32) 16;293  unsigned short Id = *(unsigned short *)&CVT[-6];294  Id = ((((Id >> 12) & 0x0f) * 10 + ((Id >> 8) & 0x0f)) * 10 + ((Id >> 4) & 0x0f)) * 10 + (Id & 0x0f);295  int HaveVectorSupport = CVT[244] & 0x80;296  int z13 = (Id >= 2964 && HaveVectorSupport);297  return z13;298}299