brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.6 KiB · aa18d9c Raw
172 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 52// RUN: %clang_cc1 -x c++ -std=c++20 -disable-llvm-passes -O3 -triple x86_64 %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK3 4typedef _Float16 half8 __attribute__((ext_vector_type(8)));5typedef __bf16 bf16x8 __attribute__((ext_vector_type(8)));6typedef float float4 __attribute__((ext_vector_type(4)));7typedef double double2 __attribute__((ext_vector_type(2)));8typedef long double ldouble2 __attribute__((ext_vector_type(2)));9 10// CHECK-LABEL: define dso_local noundef <8 x half> @_Z7pfmin16Dv8_DF16_S_(11// CHECK-SAME: <8 x half> noundef [[A:%.*]], <8 x half> noundef [[B:%.*]]) #[[ATTR0:[0-9]+]] {12// CHECK-NEXT:  [[ENTRY:.*:]]13// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <8 x half>, align 1614// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <8 x half>, align 1615// CHECK-NEXT:    store <8 x half> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6:![0-9]+]]16// CHECK-NEXT:    store <8 x half> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]17// CHECK-NEXT:    [[TMP0:%.*]] = load <8 x half>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]18// CHECK-NEXT:    [[TMP1:%.*]] = load <8 x half>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]19// CHECK-NEXT:    [[ELT_MINIMUMNUM:%.*]] = call <8 x half> @llvm.minimumnum.v8f16(<8 x half> [[TMP0]], <8 x half> [[TMP1]])20// CHECK-NEXT:    ret <8 x half> [[ELT_MINIMUMNUM]]21//22half8 pfmin16(half8 a, half8 b) {23	return __builtin_elementwise_minimumnum(a, b);24}25// CHECK-LABEL: define dso_local noundef <8 x bfloat> @_Z8pfmin16bDv8_DF16bS_(26// CHECK-SAME: <8 x bfloat> noundef [[A:%.*]], <8 x bfloat> noundef [[B:%.*]]) #[[ATTR0]] {27// CHECK-NEXT:  [[ENTRY:.*:]]28// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <8 x bfloat>, align 1629// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <8 x bfloat>, align 1630// CHECK-NEXT:    store <8 x bfloat> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]31// CHECK-NEXT:    store <8 x bfloat> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]32// CHECK-NEXT:    [[TMP0:%.*]] = load <8 x bfloat>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]33// CHECK-NEXT:    [[TMP1:%.*]] = load <8 x bfloat>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]34// CHECK-NEXT:    [[ELT_MINIMUMNUM:%.*]] = call <8 x bfloat> @llvm.minimumnum.v8bf16(<8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]])35// CHECK-NEXT:    ret <8 x bfloat> [[ELT_MINIMUMNUM]]36//37bf16x8 pfmin16b(bf16x8 a, bf16x8 b) {38	return __builtin_elementwise_minimumnum(a, b);39}40// CHECK-LABEL: define dso_local noundef <4 x float> @_Z7pfmin32Dv4_fS_(41// CHECK-SAME: <4 x float> noundef [[A:%.*]], <4 x float> noundef [[B:%.*]]) #[[ATTR0]] {42// CHECK-NEXT:  [[ENTRY:.*:]]43// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <4 x float>, align 1644// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <4 x float>, align 1645// CHECK-NEXT:    store <4 x float> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]46// CHECK-NEXT:    store <4 x float> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]47// CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]48// CHECK-NEXT:    [[TMP1:%.*]] = load <4 x float>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]49// CHECK-NEXT:    [[ELT_MINIMUMNUM:%.*]] = call <4 x float> @llvm.minimumnum.v4f32(<4 x float> [[TMP0]], <4 x float> [[TMP1]])50// CHECK-NEXT:    ret <4 x float> [[ELT_MINIMUMNUM]]51//52float4 pfmin32(float4 a, float4 b) {53	return __builtin_elementwise_minimumnum(a, b);54}55// CHECK-LABEL: define dso_local noundef <2 x double> @_Z7pfmin64Dv2_dS_(56// CHECK-SAME: <2 x double> noundef [[A:%.*]], <2 x double> noundef [[B:%.*]]) #[[ATTR0]] {57// CHECK-NEXT:  [[ENTRY:.*:]]58// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <2 x double>, align 1659// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <2 x double>, align 1660// CHECK-NEXT:    store <2 x double> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]61// CHECK-NEXT:    store <2 x double> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]62// CHECK-NEXT:    [[TMP0:%.*]] = load <2 x double>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]63// CHECK-NEXT:    [[TMP1:%.*]] = load <2 x double>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]64// CHECK-NEXT:    [[ELT_MINIMUMNUM:%.*]] = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> [[TMP0]], <2 x double> [[TMP1]])65// CHECK-NEXT:    ret <2 x double> [[ELT_MINIMUMNUM]]66//67double2 pfmin64(double2 a, double2 b) {68	return __builtin_elementwise_minimumnum(a, b);69}70// CHECK-LABEL: define dso_local noundef <2 x x86_fp80> @_Z7pfmin80Dv2_eS_(71// CHECK-SAME: ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP0:%.*]], ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP1:%.*]]) #[[ATTR2:[0-9]+]] {72// CHECK-NEXT:  [[ENTRY:.*:]]73// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <2 x x86_fp80>, align 3274// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <2 x x86_fp80>, align 3275// CHECK-NEXT:    [[A:%.*]] = load <2 x x86_fp80>, ptr [[TMP0]], align 32, !tbaa [[TBAA6]]76// CHECK-NEXT:    [[B:%.*]] = load <2 x x86_fp80>, ptr [[TMP1]], align 32, !tbaa [[TBAA6]]77// CHECK-NEXT:    store <2 x x86_fp80> [[A]], ptr [[A_ADDR]], align 32, !tbaa [[TBAA6]]78// CHECK-NEXT:    store <2 x x86_fp80> [[B]], ptr [[B_ADDR]], align 32, !tbaa [[TBAA6]]79// CHECK-NEXT:    [[TMP2:%.*]] = load <2 x x86_fp80>, ptr [[A_ADDR]], align 32, !tbaa [[TBAA6]]80// CHECK-NEXT:    [[TMP3:%.*]] = load <2 x x86_fp80>, ptr [[B_ADDR]], align 32, !tbaa [[TBAA6]]81// CHECK-NEXT:    [[ELT_MINIMUMNUM:%.*]] = call <2 x x86_fp80> @llvm.minimumnum.v2f80(<2 x x86_fp80> [[TMP2]], <2 x x86_fp80> [[TMP3]])82// CHECK-NEXT:    ret <2 x x86_fp80> [[ELT_MINIMUMNUM]]83//84ldouble2 pfmin80(ldouble2 a, ldouble2 b) {85	return __builtin_elementwise_minimumnum(a, b);86}87 88// CHECK-LABEL: define dso_local noundef <8 x half> @_Z7pfmax16Dv8_DF16_S_(89// CHECK-SAME: <8 x half> noundef [[A:%.*]], <8 x half> noundef [[B:%.*]]) #[[ATTR0]] {90// CHECK-NEXT:  [[ENTRY:.*:]]91// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <8 x half>, align 1692// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <8 x half>, align 1693// CHECK-NEXT:    store <8 x half> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]94// CHECK-NEXT:    store <8 x half> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]95// CHECK-NEXT:    [[TMP0:%.*]] = load <8 x half>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]96// CHECK-NEXT:    [[TMP1:%.*]] = load <8 x half>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]97// CHECK-NEXT:    [[ELT_MAXIMUMNUM:%.*]] = call <8 x half> @llvm.maximumnum.v8f16(<8 x half> [[TMP0]], <8 x half> [[TMP1]])98// CHECK-NEXT:    ret <8 x half> [[ELT_MAXIMUMNUM]]99//100half8 pfmax16(half8 a, half8 b) {101	return __builtin_elementwise_maximumnum(a, b);102}103// CHECK-LABEL: define dso_local noundef <8 x bfloat> @_Z8pfmax16bDv8_DF16bS_(104// CHECK-SAME: <8 x bfloat> noundef [[A:%.*]], <8 x bfloat> noundef [[B:%.*]]) #[[ATTR0]] {105// CHECK-NEXT:  [[ENTRY:.*:]]106// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <8 x bfloat>, align 16107// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <8 x bfloat>, align 16108// CHECK-NEXT:    store <8 x bfloat> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]109// CHECK-NEXT:    store <8 x bfloat> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]110// CHECK-NEXT:    [[TMP0:%.*]] = load <8 x bfloat>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]111// CHECK-NEXT:    [[TMP1:%.*]] = load <8 x bfloat>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]112// CHECK-NEXT:    [[ELT_MAXIMUMNUM:%.*]] = call <8 x bfloat> @llvm.maximumnum.v8bf16(<8 x bfloat> [[TMP0]], <8 x bfloat> [[TMP1]])113// CHECK-NEXT:    ret <8 x bfloat> [[ELT_MAXIMUMNUM]]114//115bf16x8 pfmax16b(bf16x8 a, bf16x8 b) {116	return __builtin_elementwise_maximumnum(a, b);117}118// CHECK-LABEL: define dso_local noundef <4 x float> @_Z7pfmax32Dv4_fS_(119// CHECK-SAME: <4 x float> noundef [[A:%.*]], <4 x float> noundef [[B:%.*]]) #[[ATTR0]] {120// CHECK-NEXT:  [[ENTRY:.*:]]121// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <4 x float>, align 16122// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <4 x float>, align 16123// CHECK-NEXT:    store <4 x float> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]124// CHECK-NEXT:    store <4 x float> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]125// CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]126// CHECK-NEXT:    [[TMP1:%.*]] = load <4 x float>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]127// CHECK-NEXT:    [[ELT_MAXIMUMNUM:%.*]] = call <4 x float> @llvm.maximumnum.v4f32(<4 x float> [[TMP0]], <4 x float> [[TMP1]])128// CHECK-NEXT:    ret <4 x float> [[ELT_MAXIMUMNUM]]129//130float4 pfmax32(float4 a, float4 b) {131	return __builtin_elementwise_maximumnum(a, b);132}133// CHECK-LABEL: define dso_local noundef <2 x double> @_Z7pfmax64Dv2_dS_(134// CHECK-SAME: <2 x double> noundef [[A:%.*]], <2 x double> noundef [[B:%.*]]) #[[ATTR0]] {135// CHECK-NEXT:  [[ENTRY:.*:]]136// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <2 x double>, align 16137// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <2 x double>, align 16138// CHECK-NEXT:    store <2 x double> [[A]], ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]139// CHECK-NEXT:    store <2 x double> [[B]], ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]140// CHECK-NEXT:    [[TMP0:%.*]] = load <2 x double>, ptr [[A_ADDR]], align 16, !tbaa [[TBAA6]]141// CHECK-NEXT:    [[TMP1:%.*]] = load <2 x double>, ptr [[B_ADDR]], align 16, !tbaa [[TBAA6]]142// CHECK-NEXT:    [[ELT_MAXIMUMNUM:%.*]] = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> [[TMP0]], <2 x double> [[TMP1]])143// CHECK-NEXT:    ret <2 x double> [[ELT_MAXIMUMNUM]]144//145double2 pfmax64(double2 a, double2 b) {146	return __builtin_elementwise_maximumnum(a, b);147}148 149// CHECK-LABEL: define dso_local noundef <2 x x86_fp80> @_Z7pfmax80Dv2_eS_(150// CHECK-SAME: ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP0:%.*]], ptr noundef byval(<2 x x86_fp80>) align 32 [[TMP1:%.*]]) #[[ATTR2]] {151// CHECK-NEXT:  [[ENTRY:.*:]]152// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca <2 x x86_fp80>, align 32153// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca <2 x x86_fp80>, align 32154// CHECK-NEXT:    [[A:%.*]] = load <2 x x86_fp80>, ptr [[TMP0]], align 32, !tbaa [[TBAA6]]155// CHECK-NEXT:    [[B:%.*]] = load <2 x x86_fp80>, ptr [[TMP1]], align 32, !tbaa [[TBAA6]]156// CHECK-NEXT:    store <2 x x86_fp80> [[A]], ptr [[A_ADDR]], align 32, !tbaa [[TBAA6]]157// CHECK-NEXT:    store <2 x x86_fp80> [[B]], ptr [[B_ADDR]], align 32, !tbaa [[TBAA6]]158// CHECK-NEXT:    [[TMP2:%.*]] = load <2 x x86_fp80>, ptr [[A_ADDR]], align 32, !tbaa [[TBAA6]]159// CHECK-NEXT:    [[TMP3:%.*]] = load <2 x x86_fp80>, ptr [[B_ADDR]], align 32, !tbaa [[TBAA6]]160// CHECK-NEXT:    [[ELT_MINIMUMNUM:%.*]] = call <2 x x86_fp80> @llvm.minimumnum.v2f80(<2 x x86_fp80> [[TMP2]], <2 x x86_fp80> [[TMP3]])161// CHECK-NEXT:    ret <2 x x86_fp80> [[ELT_MINIMUMNUM]]162//163ldouble2 pfmax80(ldouble2 a, ldouble2 b) {164	return __builtin_elementwise_minimumnum(a, b);165}166 167//.168// CHECK: [[META4:![0-9]+]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}169// CHECK: [[META5]] = !{!"Simple C++ TBAA"}170// CHECK: [[TBAA6]] = !{[[META4]], [[META4]], i64 0}171//.172