brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · eb3f8cb Raw
229 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// RUN: %clang_cc1 -triple loongarch32 -target-feature +f -O2 -emit-llvm %s -o - \3// RUN:     | FileCheck %s -check-prefix=LA324 5#include <larchintrin.h>6 7// LA32-LABEL: @dbar(8// LA32-NEXT:  entry:9// LA32-NEXT:    tail call void @llvm.loongarch.dbar(i32 0)10// LA32-NEXT:    tail call void @llvm.loongarch.dbar(i32 0)11// LA32-NEXT:    ret void12//13void dbar() {14  __dbar(0);15  __builtin_loongarch_dbar(0);16}17 18// LA32-LABEL: @ibar(19// LA32-NEXT:  entry:20// LA32-NEXT:    tail call void @llvm.loongarch.ibar(i32 0)21// LA32-NEXT:    tail call void @llvm.loongarch.ibar(i32 0)22// LA32-NEXT:    ret void23//24void ibar() {25  __ibar(0);26  __builtin_loongarch_ibar(0);27}28 29// LA32-LABEL: @loongarch_break(30// LA32-NEXT:  entry:31// LA32-NEXT:    tail call void @llvm.loongarch.break(i32 1)32// LA32-NEXT:    tail call void @llvm.loongarch.break(i32 1)33// LA32-NEXT:    ret void34//35void loongarch_break() {36  __break(1);37  __builtin_loongarch_break(1);38}39 40// LA32-LABEL: @syscall(41// LA32-NEXT:  entry:42// LA32-NEXT:    tail call void @llvm.loongarch.syscall(i32 1)43// LA32-NEXT:    tail call void @llvm.loongarch.syscall(i32 1)44// LA32-NEXT:    ret void45//46void syscall() {47  __syscall(1);48  __builtin_loongarch_syscall(1);49}50 51// LA32-LABEL: @csrrd_w(52// LA32-NEXT:  entry:53// LA32-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.loongarch.csrrd.w(i32 1)54// LA32-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.loongarch.csrrd.w(i32 1)55// LA32-NEXT:    ret i32 056//57unsigned int csrrd_w() {58  unsigned int a = __csrrd_w(1);59  unsigned int b = __builtin_loongarch_csrrd_w(1);60  return 0;61}62 63// LA32-LABEL: @csrwr_w(64// LA32-NEXT:  entry:65// LA32-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.loongarch.csrwr.w(i32 [[A:%.*]], i32 1)66// LA32-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.loongarch.csrwr.w(i32 [[A]], i32 1)67// LA32-NEXT:    ret i32 068//69unsigned int csrwr_w(unsigned int a) {70  unsigned int b = __csrwr_w(a, 1);71  unsigned int c = __builtin_loongarch_csrwr_w(a, 1);72  return 0;73}74 75// LA32-LABEL: @csrxchg_w(76// LA32-NEXT:  entry:77// LA32-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.loongarch.csrxchg.w(i32 [[A:%.*]], i32 [[B:%.*]], i32 1)78// LA32-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.loongarch.csrxchg.w(i32 [[A]], i32 [[B]], i32 1)79// LA32-NEXT:    ret i32 080//81unsigned int csrxchg_w(unsigned int a, unsigned int b) {82  unsigned int c = __csrxchg_w(a, b, 1);83  unsigned int d = __builtin_loongarch_csrxchg_w(a, b, 1);84  return 0;85}86 87// LA32-LABEL: @iocsrrd_b(88// LA32-NEXT:  entry:89// LA32-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.b(i32 [[A:%.*]])90// LA32-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.b(i32 [[A]])91// LA32-NEXT:    ret i8 092//93unsigned char iocsrrd_b(unsigned int a) {94  unsigned char b = __iocsrrd_b(a);95  unsigned char c = __builtin_loongarch_iocsrrd_b(a);96  return 0;97}98 99// LA32-LABEL: @iocsrrd_h(100// LA32-NEXT:  entry:101// LA32-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.h(i32 [[A:%.*]])102// LA32-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.h(i32 [[A]])103// LA32-NEXT:    ret i16 0104//105unsigned short iocsrrd_h(unsigned int a) {106  unsigned short b = __iocsrrd_h(a);107  unsigned short c = __builtin_loongarch_iocsrrd_h(a);108  return 0;109}110 111// LA32-LABEL: @iocsrrd_w(112// LA32-NEXT:  entry:113// LA32-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.w(i32 [[A:%.*]])114// LA32-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.w(i32 [[A]])115// LA32-NEXT:    ret i32 0116//117unsigned int iocsrrd_w(unsigned int a) {118  unsigned int b = __iocsrrd_w(a);119  unsigned int c = __builtin_loongarch_iocsrrd_w(a);120  return 0;121}122 123// LA32-LABEL: @iocsrwr_b(124// LA32-NEXT:  entry:125// LA32-NEXT:    [[CONV_I:%.*]] = zext i8 [[A:%.*]] to i32126// LA32-NEXT:    tail call void @llvm.loongarch.iocsrwr.b(i32 [[CONV_I]], i32 [[B:%.*]])127// LA32-NEXT:    tail call void @llvm.loongarch.iocsrwr.b(i32 [[CONV_I]], i32 [[B]])128// LA32-NEXT:    ret void129//130void iocsrwr_b(unsigned char a, unsigned int b) {131  __iocsrwr_b(a, b);132  __builtin_loongarch_iocsrwr_b(a, b);133}134 135// LA32-LABEL: @iocsrwr_h(136// LA32-NEXT:  entry:137// LA32-NEXT:    [[CONV_I:%.*]] = zext i16 [[A:%.*]] to i32138// LA32-NEXT:    tail call void @llvm.loongarch.iocsrwr.h(i32 [[CONV_I]], i32 [[B:%.*]])139// LA32-NEXT:    tail call void @llvm.loongarch.iocsrwr.h(i32 [[CONV_I]], i32 [[B]])140// LA32-NEXT:    ret void141//142void iocsrwr_h(unsigned short a, unsigned int b) {143  __iocsrwr_h(a, b);144  __builtin_loongarch_iocsrwr_h(a, b);145}146 147// LA32-LABEL: @iocsrwr_w(148// LA32-NEXT:  entry:149// LA32-NEXT:    tail call void @llvm.loongarch.iocsrwr.w(i32 [[A:%.*]], i32 [[B:%.*]])150// LA32-NEXT:    tail call void @llvm.loongarch.iocsrwr.w(i32 [[A]], i32 [[B]])151// LA32-NEXT:    ret void152//153void iocsrwr_w(unsigned int a, unsigned int b) {154  __iocsrwr_w(a, b);155  __builtin_loongarch_iocsrwr_w(a, b);156}157 158// LA32-LABEL: @cpucfg(159// LA32-NEXT:  entry:160// LA32-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.loongarch.cpucfg(i32 [[A:%.*]])161// LA32-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.loongarch.cpucfg(i32 [[A]])162// LA32-NEXT:    ret i32 0163//164unsigned int cpucfg(unsigned int a) {165  unsigned int b = __cpucfg(a);166  unsigned int c = __builtin_loongarch_cpucfg(a);167  return 0;168}169 170// LA32-LABEL: @rdtime(171// LA32-NEXT:  entry:172// LA32-NEXT:    [[TMP0:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimeh.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1:[0-9]+]], !srcloc [[META2:![0-9]+]]173// LA32-NEXT:    [[TMP1:%.*]] = tail call { i32, i32 } asm sideeffect "rdtimel.w $0, $1\0A\09", "=&r,=&r"() #[[ATTR1]], !srcloc [[META3:![0-9]+]]174// LA32-NEXT:    ret void175//176void rdtime() {177  __rdtimeh_w();178  __rdtimel_w();179}180 181// LA32-LABEL: @loongarch_movfcsr2gr(182// LA32-NEXT:  entry:183// LA32-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.loongarch.movfcsr2gr(i32 1)184// LA32-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.loongarch.movfcsr2gr(i32 1)185// LA32-NEXT:    ret i32 0186//187int loongarch_movfcsr2gr() {188  int a =  __movfcsr2gr(1);189  int b = __builtin_loongarch_movfcsr2gr(1);190  return 0;191}192 193// LA32-LABEL: @loongarch_movgr2fcsr(194// LA32-NEXT:  entry:195// LA32-NEXT:    tail call void @llvm.loongarch.movgr2fcsr(i32 1, i32 [[A:%.*]])196// LA32-NEXT:    tail call void @llvm.loongarch.movgr2fcsr(i32 1, i32 [[A]])197// LA32-NEXT:    ret void198//199void loongarch_movgr2fcsr(int a) {200  __movgr2fcsr(1, a);201  __builtin_loongarch_movgr2fcsr(1, a);202}203 204// LA32-LABEL: @cacop_w(205// LA32-NEXT:  entry:206// LA32-NEXT:    tail call void @llvm.loongarch.cacop.w(i32 1, i32 [[A:%.*]], i32 1024)207// LA32-NEXT:    tail call void @llvm.loongarch.cacop.w(i32 1, i32 [[A]], i32 1024)208// LA32-NEXT:    ret void209//210void cacop_w(unsigned long int a) {211  __cacop_w(1, a, 1024);212  __builtin_loongarch_cacop_w(1, a, 1024);213}214 215// LA32-LABEL: @iocsrrd_h_result(216// LA32-NEXT:  entry:217// LA32-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.h(i32 [[A:%.*]])218// LA32-NEXT:    [[CONV_I:%.*]] = trunc i32 [[TMP0]] to i16219// LA32-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.loongarch.iocsrrd.h(i32 [[A]])220// LA32-NEXT:    [[TMP2:%.*]] = trunc i32 [[TMP1]] to i16221// LA32-NEXT:    [[CONV3:%.*]] = add i16 [[TMP2]], [[CONV_I]]222// LA32-NEXT:    ret i16 [[CONV3]]223//224unsigned short iocsrrd_h_result(unsigned int a) {225  unsigned short b = __iocsrrd_h(a);226  unsigned short c = __builtin_loongarch_iocsrrd_h(a);227  return b+c;228}229