304 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 62// RUN: %clang_cc1 -triple s390x-linux-gnu -target-cpu z14 -fzvector \3// RUN: -O -emit-llvm -o - -W -Wall -Werror %s | FileCheck %s4 5volatile vector float ff, ff2;6volatile vector bool int bi;7 8// CHECK-LABEL: define dso_local void @test_assign(9// CHECK-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {10// CHECK-NEXT: [[ENTRY:.*:]]11// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7:![0-9]+]]12// CHECK-NEXT: store volatile <4 x float> [[TMP0]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]13// CHECK-NEXT: ret void14//15void test_assign (void)16{17 ff = ff2;18}19 20// CHECK-LABEL: define dso_local void @test_pos(21// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {22// CHECK-NEXT: [[ENTRY:.*:]]23// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]24// CHECK-NEXT: store volatile <4 x float> [[TMP0]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]25// CHECK-NEXT: ret void26//27void test_pos (void)28{29 ff = +ff2;30}31 32// CHECK-LABEL: define dso_local void @test_neg(33// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {34// CHECK-NEXT: [[ENTRY:.*:]]35// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]36// CHECK-NEXT: [[FNEG:%.*]] = fneg <4 x float> [[TMP0]]37// CHECK-NEXT: store volatile <4 x float> [[FNEG]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]38// CHECK-NEXT: ret void39//40void test_neg (void)41{42 ff = -ff2;43}44 45// CHECK-LABEL: define dso_local void @test_preinc(46// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {47// CHECK-NEXT: [[ENTRY:.*:]]48// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]49// CHECK-NEXT: [[INC:%.*]] = fadd <4 x float> [[TMP0]], splat (float 1.000000e+00)50// CHECK-NEXT: store volatile <4 x float> [[INC]], ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]51// CHECK-NEXT: ret void52//53void test_preinc (void)54{55 ++ff2;56}57 58// CHECK-LABEL: define dso_local void @test_postinc(59// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {60// CHECK-NEXT: [[ENTRY:.*:]]61// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]62// CHECK-NEXT: [[INC:%.*]] = fadd <4 x float> [[TMP0]], splat (float 1.000000e+00)63// CHECK-NEXT: store volatile <4 x float> [[INC]], ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]64// CHECK-NEXT: ret void65//66void test_postinc (void)67{68 ff2++;69}70 71// CHECK-LABEL: define dso_local void @test_predec(72// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {73// CHECK-NEXT: [[ENTRY:.*:]]74// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]75// CHECK-NEXT: [[DEC:%.*]] = fadd <4 x float> [[TMP0]], splat (float -1.000000e+00)76// CHECK-NEXT: store volatile <4 x float> [[DEC]], ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]77// CHECK-NEXT: ret void78//79void test_predec (void)80{81 --ff2;82}83 84// CHECK-LABEL: define dso_local void @test_postdec(85// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {86// CHECK-NEXT: [[ENTRY:.*:]]87// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]88// CHECK-NEXT: [[DEC:%.*]] = fadd <4 x float> [[TMP0]], splat (float -1.000000e+00)89// CHECK-NEXT: store volatile <4 x float> [[DEC]], ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]90// CHECK-NEXT: ret void91//92void test_postdec (void)93{94 ff2--;95}96 97// CHECK-LABEL: define dso_local void @test_add(98// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {99// CHECK-NEXT: [[ENTRY:.*:]]100// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]101// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]102// CHECK-NEXT: [[ADD:%.*]] = fadd <4 x float> [[TMP0]], [[TMP1]]103// CHECK-NEXT: store volatile <4 x float> [[ADD]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]104// CHECK-NEXT: ret void105//106void test_add (void)107{108 ff = ff + ff2;109}110 111// CHECK-LABEL: define dso_local void @test_add_assign(112// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {113// CHECK-NEXT: [[ENTRY:.*:]]114// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]115// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]116// CHECK-NEXT: [[ADD:%.*]] = fadd <4 x float> [[TMP0]], [[TMP1]]117// CHECK-NEXT: store volatile <4 x float> [[ADD]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]118// CHECK-NEXT: ret void119//120void test_add_assign (void)121{122 ff += ff2;123}124 125// CHECK-LABEL: define dso_local void @test_sub(126// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {127// CHECK-NEXT: [[ENTRY:.*:]]128// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]129// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]130// CHECK-NEXT: [[SUB:%.*]] = fsub <4 x float> [[TMP0]], [[TMP1]]131// CHECK-NEXT: store volatile <4 x float> [[SUB]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]132// CHECK-NEXT: ret void133//134void test_sub (void)135{136 ff = ff - ff2;137}138 139// CHECK-LABEL: define dso_local void @test_sub_assign(140// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {141// CHECK-NEXT: [[ENTRY:.*:]]142// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]143// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]144// CHECK-NEXT: [[SUB:%.*]] = fsub <4 x float> [[TMP1]], [[TMP0]]145// CHECK-NEXT: store volatile <4 x float> [[SUB]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]146// CHECK-NEXT: ret void147//148void test_sub_assign (void)149{150 ff -= ff2;151}152 153// CHECK-LABEL: define dso_local void @test_mul(154// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {155// CHECK-NEXT: [[ENTRY:.*:]]156// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]157// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]158// CHECK-NEXT: [[MUL:%.*]] = fmul <4 x float> [[TMP0]], [[TMP1]]159// CHECK-NEXT: store volatile <4 x float> [[MUL]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]160// CHECK-NEXT: ret void161//162void test_mul (void)163{164 ff = ff * ff2;165}166 167// CHECK-LABEL: define dso_local void @test_mul_assign(168// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {169// CHECK-NEXT: [[ENTRY:.*:]]170// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]171// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]172// CHECK-NEXT: [[MUL:%.*]] = fmul <4 x float> [[TMP0]], [[TMP1]]173// CHECK-NEXT: store volatile <4 x float> [[MUL]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]174// CHECK-NEXT: ret void175//176void test_mul_assign (void)177{178 ff *= ff2;179}180 181// CHECK-LABEL: define dso_local void @test_div(182// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {183// CHECK-NEXT: [[ENTRY:.*:]]184// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]185// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]186// CHECK-NEXT: [[DIV:%.*]] = fdiv <4 x float> [[TMP0]], [[TMP1]]187// CHECK-NEXT: store volatile <4 x float> [[DIV]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]188// CHECK-NEXT: ret void189//190void test_div (void)191{192 ff = ff / ff2;193}194 195// CHECK-LABEL: define dso_local void @test_div_assign(196// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {197// CHECK-NEXT: [[ENTRY:.*:]]198// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]199// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]200// CHECK-NEXT: [[DIV:%.*]] = fdiv <4 x float> [[TMP1]], [[TMP0]]201// CHECK-NEXT: store volatile <4 x float> [[DIV]], ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]202// CHECK-NEXT: ret void203//204void test_div_assign (void)205{206 ff /= ff2;207}208 209// CHECK-LABEL: define dso_local void @test_cmpeq(210// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {211// CHECK-NEXT: [[ENTRY:.*:]]212// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]213// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]214// CHECK-NEXT: [[CMP:%.*]] = fcmp oeq <4 x float> [[TMP0]], [[TMP1]]215// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>216// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[CHAR_TBAA7]]217// CHECK-NEXT: ret void218//219void test_cmpeq (void)220{221 bi = ff == ff2;222}223 224// CHECK-LABEL: define dso_local void @test_cmpne(225// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {226// CHECK-NEXT: [[ENTRY:.*:]]227// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]228// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]229// CHECK-NEXT: [[CMP:%.*]] = fcmp une <4 x float> [[TMP0]], [[TMP1]]230// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>231// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[CHAR_TBAA7]]232// CHECK-NEXT: ret void233//234void test_cmpne (void)235{236 bi = ff != ff2;237}238 239// CHECK-LABEL: define dso_local void @test_cmpge(240// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {241// CHECK-NEXT: [[ENTRY:.*:]]242// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]243// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]244// CHECK-NEXT: [[CMP:%.*]] = fcmp oge <4 x float> [[TMP0]], [[TMP1]]245// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>246// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[CHAR_TBAA7]]247// CHECK-NEXT: ret void248//249void test_cmpge (void)250{251 bi = ff >= ff2;252}253 254// CHECK-LABEL: define dso_local void @test_cmpgt(255// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {256// CHECK-NEXT: [[ENTRY:.*:]]257// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]258// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]259// CHECK-NEXT: [[CMP:%.*]] = fcmp ogt <4 x float> [[TMP0]], [[TMP1]]260// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>261// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[CHAR_TBAA7]]262// CHECK-NEXT: ret void263//264void test_cmpgt (void)265{266 bi = ff > ff2;267}268 269// CHECK-LABEL: define dso_local void @test_cmple(270// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {271// CHECK-NEXT: [[ENTRY:.*:]]272// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]273// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]274// CHECK-NEXT: [[CMP:%.*]] = fcmp ole <4 x float> [[TMP0]], [[TMP1]]275// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>276// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[CHAR_TBAA7]]277// CHECK-NEXT: ret void278//279void test_cmple (void)280{281 bi = ff <= ff2;282}283 284// CHECK-LABEL: define dso_local void @test_cmplt(285// CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {286// CHECK-NEXT: [[ENTRY:.*:]]287// CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x float>, ptr @ff, align 8, !tbaa [[CHAR_TBAA7]]288// CHECK-NEXT: [[TMP1:%.*]] = load volatile <4 x float>, ptr @ff2, align 8, !tbaa [[CHAR_TBAA7]]289// CHECK-NEXT: [[CMP:%.*]] = fcmp olt <4 x float> [[TMP0]], [[TMP1]]290// CHECK-NEXT: [[SEXT:%.*]] = sext <4 x i1> [[CMP]] to <4 x i32>291// CHECK-NEXT: store volatile <4 x i32> [[SEXT]], ptr @bi, align 8, !tbaa [[CHAR_TBAA7]]292// CHECK-NEXT: ret void293//294void test_cmplt (void)295{296 bi = ff < ff2;297}298 299//.300// CHECK: [[META5:![0-9]+]] = !{!"omnipotent char", [[META6:![0-9]+]], i64 0}301// CHECK: [[META6]] = !{!"Simple C/C++ TBAA"}302// CHECK: [[CHAR_TBAA7]] = !{[[META5]], [[META5]], i64 0}303//.304