273 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// REQUIRES: aarch64-registered-target3// RUN: %clang_cc1 -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,instcombine,tailcallelim | FileCheck %s4// RUN: %clang_cc1 -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK5// RUN: %clang_cc1 -triple aarch64 -target-feature +sve -S -disable-O0-optnone -Werror -Wall -o /dev/null %s6// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -S -disable-O0-optnone -Werror -Wall -o /dev/null %s7 8#include <arm_sve.h>9 10#if defined __ARM_FEATURE_SME11#define MODE_ATTR __arm_streaming12#else13#define MODE_ATTR14#endif15 16// CHECK-LABEL: @test_svcnth(17// CHECK-NEXT: entry:18// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()19// CHECK-NEXT: [[TMP1:%.*]] = shl nuw nsw i64 [[TMP0]], 320// CHECK-NEXT: ret i64 [[TMP1]]21//22// CPP-CHECK-LABEL: @_Z11test_svcnthv(23// CPP-CHECK-NEXT: entry:24// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()25// CPP-CHECK-NEXT: [[TMP1:%.*]] = shl nuw nsw i64 [[TMP0]], 326// CPP-CHECK-NEXT: ret i64 [[TMP1]]27//28uint64_t test_svcnth(void) MODE_ATTR29{30 return svcnth();31}32 33// CHECK-LABEL: @test_svcnth_pat(34// CHECK-NEXT: entry:35// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 0)36// CHECK-NEXT: ret i64 [[TMP0]]37//38// CPP-CHECK-LABEL: @_Z15test_svcnth_patv(39// CPP-CHECK-NEXT: entry:40// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 0)41// CPP-CHECK-NEXT: ret i64 [[TMP0]]42//43uint64_t test_svcnth_pat(void) MODE_ATTR44{45 return svcnth_pat(SV_POW2);46}47 48// CHECK-LABEL: @test_svcnth_pat_1(49// CHECK-NEXT: entry:50// CHECK-NEXT: ret i64 151//52// CPP-CHECK-LABEL: @_Z17test_svcnth_pat_1v(53// CPP-CHECK-NEXT: entry:54// CPP-CHECK-NEXT: ret i64 155//56uint64_t test_svcnth_pat_1(void) MODE_ATTR57{58 return svcnth_pat(SV_VL1);59}60 61// CHECK-LABEL: @test_svcnth_pat_2(62// CHECK-NEXT: entry:63// CHECK-NEXT: ret i64 264//65// CPP-CHECK-LABEL: @_Z17test_svcnth_pat_2v(66// CPP-CHECK-NEXT: entry:67// CPP-CHECK-NEXT: ret i64 268//69uint64_t test_svcnth_pat_2(void) MODE_ATTR70{71 return svcnth_pat(SV_VL2);72}73 74// CHECK-LABEL: @test_svcnth_pat_3(75// CHECK-NEXT: entry:76// CHECK-NEXT: ret i64 377//78// CPP-CHECK-LABEL: @_Z17test_svcnth_pat_3v(79// CPP-CHECK-NEXT: entry:80// CPP-CHECK-NEXT: ret i64 381//82uint64_t test_svcnth_pat_3(void) MODE_ATTR83{84 return svcnth_pat(SV_VL3);85}86 87// CHECK-LABEL: @test_svcnth_pat_4(88// CHECK-NEXT: entry:89// CHECK-NEXT: ret i64 490//91// CPP-CHECK-LABEL: @_Z17test_svcnth_pat_4v(92// CPP-CHECK-NEXT: entry:93// CPP-CHECK-NEXT: ret i64 494//95uint64_t test_svcnth_pat_4(void) MODE_ATTR96{97 return svcnth_pat(SV_VL4);98}99 100// CHECK-LABEL: @test_svcnth_pat_5(101// CHECK-NEXT: entry:102// CHECK-NEXT: ret i64 5103//104// CPP-CHECK-LABEL: @_Z17test_svcnth_pat_5v(105// CPP-CHECK-NEXT: entry:106// CPP-CHECK-NEXT: ret i64 5107//108uint64_t test_svcnth_pat_5(void) MODE_ATTR109{110 return svcnth_pat(SV_VL5);111}112 113// CHECK-LABEL: @test_svcnth_pat_6(114// CHECK-NEXT: entry:115// CHECK-NEXT: ret i64 6116//117// CPP-CHECK-LABEL: @_Z17test_svcnth_pat_6v(118// CPP-CHECK-NEXT: entry:119// CPP-CHECK-NEXT: ret i64 6120//121uint64_t test_svcnth_pat_6(void) MODE_ATTR122{123 return svcnth_pat(SV_VL6);124}125 126// CHECK-LABEL: @test_svcnth_pat_7(127// CHECK-NEXT: entry:128// CHECK-NEXT: ret i64 7129//130// CPP-CHECK-LABEL: @_Z17test_svcnth_pat_7v(131// CPP-CHECK-NEXT: entry:132// CPP-CHECK-NEXT: ret i64 7133//134uint64_t test_svcnth_pat_7(void) MODE_ATTR135{136 return svcnth_pat(SV_VL7);137}138 139// CHECK-LABEL: @test_svcnth_pat_8(140// CHECK-NEXT: entry:141// CHECK-NEXT: ret i64 8142//143// CPP-CHECK-LABEL: @_Z17test_svcnth_pat_8v(144// CPP-CHECK-NEXT: entry:145// CPP-CHECK-NEXT: ret i64 8146//147uint64_t test_svcnth_pat_8(void) MODE_ATTR148{149 return svcnth_pat(SV_VL8);150}151 152// CHECK-LABEL: @test_svcnth_pat_9(153// CHECK-NEXT: entry:154// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 9)155// CHECK-NEXT: ret i64 [[TMP0]]156//157// CPP-CHECK-LABEL: @_Z17test_svcnth_pat_9v(158// CPP-CHECK-NEXT: entry:159// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 9)160// CPP-CHECK-NEXT: ret i64 [[TMP0]]161//162uint64_t test_svcnth_pat_9(void) MODE_ATTR163{164 return svcnth_pat(SV_VL16);165}166 167// CHECK-LABEL: @test_svcnth_pat_10(168// CHECK-NEXT: entry:169// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 10)170// CHECK-NEXT: ret i64 [[TMP0]]171//172// CPP-CHECK-LABEL: @_Z18test_svcnth_pat_10v(173// CPP-CHECK-NEXT: entry:174// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 10)175// CPP-CHECK-NEXT: ret i64 [[TMP0]]176//177uint64_t test_svcnth_pat_10(void) MODE_ATTR178{179 return svcnth_pat(SV_VL32);180}181 182// CHECK-LABEL: @test_svcnth_pat_11(183// CHECK-NEXT: entry:184// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 11)185// CHECK-NEXT: ret i64 [[TMP0]]186//187// CPP-CHECK-LABEL: @_Z18test_svcnth_pat_11v(188// CPP-CHECK-NEXT: entry:189// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 11)190// CPP-CHECK-NEXT: ret i64 [[TMP0]]191//192uint64_t test_svcnth_pat_11(void) MODE_ATTR193{194 return svcnth_pat(SV_VL64);195}196 197// CHECK-LABEL: @test_svcnth_pat_12(198// CHECK-NEXT: entry:199// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 12)200// CHECK-NEXT: ret i64 [[TMP0]]201//202// CPP-CHECK-LABEL: @_Z18test_svcnth_pat_12v(203// CPP-CHECK-NEXT: entry:204// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 12)205// CPP-CHECK-NEXT: ret i64 [[TMP0]]206//207uint64_t test_svcnth_pat_12(void) MODE_ATTR208{209 return svcnth_pat(SV_VL128);210}211 212// CHECK-LABEL: @test_svcnth_pat_13(213// CHECK-NEXT: entry:214// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 13)215// CHECK-NEXT: ret i64 [[TMP0]]216//217// CPP-CHECK-LABEL: @_Z18test_svcnth_pat_13v(218// CPP-CHECK-NEXT: entry:219// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 13)220// CPP-CHECK-NEXT: ret i64 [[TMP0]]221//222uint64_t test_svcnth_pat_13(void) MODE_ATTR223{224 return svcnth_pat(SV_VL256);225}226 227// CHECK-LABEL: @test_svcnth_pat_14(228// CHECK-NEXT: entry:229// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 29)230// CHECK-NEXT: ret i64 [[TMP0]]231//232// CPP-CHECK-LABEL: @_Z18test_svcnth_pat_14v(233// CPP-CHECK-NEXT: entry:234// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 29)235// CPP-CHECK-NEXT: ret i64 [[TMP0]]236//237uint64_t test_svcnth_pat_14(void) MODE_ATTR238{239 return svcnth_pat(SV_MUL4);240}241 242// CHECK-LABEL: @test_svcnth_pat_15(243// CHECK-NEXT: entry:244// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 30)245// CHECK-NEXT: ret i64 [[TMP0]]246//247// CPP-CHECK-LABEL: @_Z18test_svcnth_pat_15v(248// CPP-CHECK-NEXT: entry:249// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.aarch64.sve.cnth(i32 30)250// CPP-CHECK-NEXT: ret i64 [[TMP0]]251//252uint64_t test_svcnth_pat_15(void) MODE_ATTR253{254 return svcnth_pat(SV_MUL3);255}256 257// CHECK-LABEL: @test_svcnth_pat_16(258// CHECK-NEXT: entry:259// CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()260// CHECK-NEXT: [[TMP1:%.*]] = shl nuw nsw i64 [[TMP0]], 3261// CHECK-NEXT: ret i64 [[TMP1]]262//263// CPP-CHECK-LABEL: @_Z18test_svcnth_pat_16v(264// CPP-CHECK-NEXT: entry:265// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call i64 @llvm.vscale.i64()266// CPP-CHECK-NEXT: [[TMP1:%.*]] = shl nuw nsw i64 [[TMP0]], 3267// CPP-CHECK-NEXT: ret i64 [[TMP1]]268//269uint64_t test_svcnth_pat_16(void) MODE_ATTR270{271 return svcnth_pat(SV_ALL);272}273