brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 4848bef Raw
152 lines · c
1// REQUIRES: systemz-registered-target2// RUN: %clang_cc1 -target-cpu zEC12 -triple s390x-ibm-linux -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s3// RUN: %clang_cc1 -target-cpu zEC12 -triple s390x-ibm-linux -Wall -Wno-unused -Werror -emit-llvm -x c++ %s -o - | FileCheck %s4 5#include <stdint.h>6#include <htmintrin.h>7 8int global = 0;9uint64_t g;10struct __htm_tdb global_tdb;11 12void test_htm1(struct __htm_tdb *tdb, int reg, int *mem, uint64_t *mem64) {13// CHECK-LABEL: test_htm114 15  __builtin_tbegin ((void *)0);16// CHECK: call i32 @llvm.s390.tbegin(ptr null, i32 65292)17  __builtin_tbegin ((void *)0x12345678);18// CHECK: call i32 @llvm.s390.tbegin(ptr inttoptr (i64 305419896 to ptr), i32 65292)19  __builtin_tbegin (tdb);20// CHECK: call i32 @llvm.s390.tbegin(ptr %{{.*}}, i32 65292)21  __builtin_tbegin (&global_tdb);22// CHECK: call i32 @llvm.s390.tbegin(ptr @global_tdb, i32 65292)23 24  __builtin_tbegin_nofloat ((void *)0);25// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr null, i32 65292)26  __builtin_tbegin_nofloat ((void *)0x12345678);27// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr inttoptr (i64 305419896 to ptr), i32 65292)28  __builtin_tbegin_nofloat (tdb);29// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr %{{.*}}, i32 65292)30  __builtin_tbegin_nofloat (&global_tdb);31// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr @global_tdb, i32 65292)32 33  __builtin_tbegin_retry ((void *)0, 6);34// CHECK: call i32 @llvm.s390.tbegin(ptr null, i32 65292)35// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})36  __builtin_tbegin_retry ((void *)0x12345678, 6);37// CHECK: call i32 @llvm.s390.tbegin(ptr %{{.*}}, i32 65292)38// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})39  __builtin_tbegin_retry (tdb, 6);40// CHECK: call i32 @llvm.s390.tbegin(ptr %{{.*}}, i32 65292)41// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})42  __builtin_tbegin_retry (&global_tdb, 6);43// CHECK: call i32 @llvm.s390.tbegin(ptr %{{.*}}, i32 65292)44// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})45 46  __builtin_tbegin_retry_nofloat ((void *)0, 6);47// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr null, i32 65292)48// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})49  __builtin_tbegin_retry_nofloat ((void *)0x12345678, 6);50// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr %{{.*}}, i32 65292)51// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})52  __builtin_tbegin_retry_nofloat (tdb, 6);53// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr %{{.*}}, i32 65292)54// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})55  __builtin_tbegin_retry_nofloat (&global_tdb, 6);56// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr %{{.*}}, i32 65292)57// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})58 59  __builtin_tbeginc ();60// CHECK: call void @llvm.s390.tbeginc(ptr null, i32 65288)61 62  __builtin_tabort (256);63// CHECK: call void @llvm.s390.tabort(i64 256)64  __builtin_tabort (-1);65// CHECK: call void @llvm.s390.tabort(i64 -1)66  __builtin_tabort (reg);67// CHECK: call void @llvm.s390.tabort(i64 %{{.*}})68 69  __builtin_tend();70// CHECK: call i32 @llvm.s390.tend()71 72  int n = __builtin_tx_nesting_depth();73// CHECK: call i32 @llvm.s390.etnd()74 75  __builtin_non_tx_store (mem64, 0);76// CHECK: call void @llvm.s390.ntstg(i64 0, ptr %{{.*}})77  const uint64_t val_var = 0x1122334455667788;78  __builtin_non_tx_store (mem64, val_var);79// CHECK: call void @llvm.s390.ntstg(i64 1234605616436508552, ptr %{{.*}})80  __builtin_non_tx_store (mem64, (uint64_t)reg);81// CHECK: call void @llvm.s390.ntstg(i64 %{{.*}}, ptr %{{.*}})82  __builtin_non_tx_store (mem64, g);83// CHECK: call void @llvm.s390.ntstg(i64 %{{.*}}, ptr %{{.*}})84  __builtin_non_tx_store ((uint64_t *)0, 0);85// CHECK: call void @llvm.s390.ntstg(i64 0, ptr null)86  __builtin_non_tx_store ((uint64_t *)0x12345678, 0);87// CHECK: call void @llvm.s390.ntstg(i64 0, ptr inttoptr (i64 305419896 to ptr))88  __builtin_non_tx_store (&g, 23);89// CHECK: call void @llvm.s390.ntstg(i64 23, ptr @g)90  __builtin_non_tx_store (&g, reg);91// CHECK: call void @llvm.s390.ntstg(i64 %{{.*}}, ptr @g)92  __builtin_non_tx_store (&g, *mem);93// CHECK: call void @llvm.s390.ntstg(i64 %{{.*}}, ptr @g)94  __builtin_non_tx_store (&g, global);95// CHECK: call void @llvm.s390.ntstg(i64 %{{.*}}, ptr @g)96 97  __builtin_tx_assist (0);98// CHECK: call void @llvm.s390.ppa.txassist(i32 0)99  __builtin_tx_assist (1);100// CHECK: call void @llvm.s390.ppa.txassist(i32 1)101  __builtin_tx_assist (reg);102// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})103  __builtin_tx_assist (*mem);104// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})105  __builtin_tx_assist (global);106// CHECK: call void @llvm.s390.ppa.txassist(i32 %{{.*}})107}108 109#include <htmxlintrin.h>110 111void test_htmxl1(void) {112// CHECK-LABEL: test_htmxl1113 114  struct __htm_tdb tdb_struct;115  void * const tdb = &tdb_struct;116  long result;117  unsigned char code;118 119  result = __TM_simple_begin ();120// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr null, i32 65292)121  result = __TM_begin (tdb);122// CHECK: call i32 @llvm.s390.tbegin.nofloat(ptr %{{.*}}, i32 65292)123  result = __TM_end ();124// CHECK: call i32 @llvm.s390.tend()125  __TM_abort ();126// CHECK: call void @llvm.s390.tabort(i64 256)127  __TM_named_abort (42);128// CHECK: call void @llvm.s390.tabort(i64 %{{.*}})129  __TM_non_transactional_store (&g, 42);130// CHECK: call void @llvm.s390.ntstg(i64 %{{.*}}, ptr %{{.*}})131  result = __TM_nesting_depth (tdb);132// CHECK: call i32 @llvm.s390.etnd()133 134  result = __TM_is_user_abort (tdb);135  result = __TM_is_named_user_abort (tdb, &code);136  result = __TM_is_illegal (tdb);137  result = __TM_is_footprint_exceeded (tdb);138  result = __TM_is_nested_too_deep (tdb);139  result = __TM_is_conflict (tdb);140  result = __TM_is_failure_persistent (result);141  result = __TM_failure_address (tdb);142  result = __TM_failure_code (tdb);143}144 145void test_eh_return_data_regno() {146  volatile int res;147  res = __builtin_eh_return_data_regno(0); // CHECK: store volatile i32 6148  res = __builtin_eh_return_data_regno(1); // CHECK: store volatile i32 7149  res = __builtin_eh_return_data_regno(2); // CHECK: store volatile i32 8150  res = __builtin_eh_return_data_regno(3); // CHECK: store volatile i32 9151}152