brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · a36b367 Raw
244 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=arm64-eabi -mattr=+bf16 | FileCheck %s3; RUN: llc < %s -mtriple=aarch64 -mattr=+bf16 | FileCheck %s4 5; test argument passing and simple load/store6 7define bfloat @test_load(ptr %p) nounwind {8; CHECK-LABEL: test_load:9; CHECK:       // %bb.0:10; CHECK-NEXT:    ldr h0, [x0]11; CHECK-NEXT:    ret12  %tmp1 = load bfloat, ptr %p, align 1613  ret bfloat %tmp114}15 16define bfloat @test_load_offset1(ptr %p) nounwind {17; CHECK-LABEL: test_load_offset1:18; CHECK:       // %bb.0:19; CHECK-NEXT:    ldur h0, [x0, #1]20; CHECK-NEXT:    ret21  %g = getelementptr inbounds i8, ptr %p, i64 122  %tmp1 = load bfloat, ptr %g, align 223  ret bfloat %tmp124}25 26define bfloat @test_load_offset2(ptr %p) nounwind {27; CHECK-LABEL: test_load_offset2:28; CHECK:       // %bb.0:29; CHECK-NEXT:    ldr h0, [x0, #2]30; CHECK-NEXT:    ret31  %g = getelementptr inbounds i8, ptr %p, i64 232  %tmp1 = load bfloat, ptr %g, align 233  ret bfloat %tmp134}35 36define <4 x bfloat> @test_vec_load(ptr %p) nounwind {37; CHECK-LABEL: test_vec_load:38; CHECK:       // %bb.0:39; CHECK-NEXT:    ldr d0, [x0]40; CHECK-NEXT:    ret41  %tmp1 = load <4 x bfloat>, ptr %p, align 1642  ret <4 x bfloat> %tmp143}44 45define void @test_store(ptr %a, bfloat %b) nounwind {46; CHECK-LABEL: test_store:47; CHECK:       // %bb.0:48; CHECK-NEXT:    str h0, [x0]49; CHECK-NEXT:    ret50  store bfloat %b, ptr %a, align 1651  ret void52}53 54define void @test_store_negative_offset(ptr %a, bfloat %b) nounwind {55; CHECK-LABEL: test_store_negative_offset:56; CHECK:       // %bb.0: // %entry57; CHECK-NEXT:    stur h0, [x0, #-4]58; CHECK-NEXT:    ret59entry:60  %0 = getelementptr inbounds bfloat, ptr %a, i64 -261  store bfloat %b, ptr %0, align 262  ret void63}64 65; Simple store of v4bf1666define void @test_vec_store(ptr %a, <4 x bfloat> %b) nounwind {67; CHECK-LABEL: test_vec_store:68; CHECK:       // %bb.0: // %entry69; CHECK-NEXT:    str d0, [x0]70; CHECK-NEXT:    ret71entry:72  store <4 x bfloat> %b, ptr %a, align 1673  ret void74}75 76define <8 x bfloat> @test_build_vector_const() {77; CHECK-LABEL: test_build_vector_const:78; CHECK:       // %bb.0:79; CHECK-NEXT:    mov w8, #16256 // =0x3f8080; CHECK-NEXT:    dup v0.8h, w881; CHECK-NEXT:    ret82  ret  <8 x bfloat> <bfloat 0xR3F80, bfloat 0xR3F80, bfloat 0xR3F80, bfloat 0xR3F80, bfloat 0xR3F80, bfloat 0xR3F80, bfloat 0xR3F80, bfloat 0xR3F80>83}84 85define ptr @test_store_post(bfloat %val, ptr %ptr) {86; CHECK-LABEL: test_store_post:87; CHECK:       // %bb.0:88; CHECK-NEXT:    str h0, [x0], #289; CHECK-NEXT:    ret90  store bfloat %val, ptr %ptr91  %next = getelementptr bfloat, ptr %ptr, i32 192  ret ptr %next93}94 95define ptr @test_store_post_v4bf16(<4 x bfloat> %val, ptr %ptr) {96; CHECK-LABEL: test_store_post_v4bf16:97; CHECK:       // %bb.0:98; CHECK-NEXT:    str d0, [x0], #899; CHECK-NEXT:    ret100  store <4 x bfloat> %val, ptr %ptr101  %next = getelementptr <4 x bfloat>, ptr %ptr, i32 1102  ret ptr %next103}104 105define ptr @test_store_post_v8bf16(<8 x bfloat> %val, ptr %ptr) {106; CHECK-LABEL: test_store_post_v8bf16:107; CHECK:       // %bb.0:108; CHECK-NEXT:    str q0, [x0], #16109; CHECK-NEXT:    ret110  store <8 x bfloat> %val, ptr %ptr111  %next = getelementptr <8 x bfloat>, ptr %ptr, i32 1112  ret ptr %next113}114 115define { bfloat, ptr } @test_load_post(ptr %ptr) {116; CHECK-LABEL: test_load_post:117; CHECK:       // %bb.0:118; CHECK-NEXT:    ldr h0, [x0], #2119; CHECK-NEXT:    ret120  %val = load bfloat, ptr %ptr121  %res.tmp = insertvalue { bfloat, ptr } undef, bfloat %val, 0122  %next = getelementptr bfloat, ptr %ptr, i32 1123  %res = insertvalue { bfloat, ptr } %res.tmp, ptr %next, 1124  ret { bfloat, ptr } %res125}126 127define { <4 x bfloat>, ptr } @test_load_post_v4bf16(ptr %ptr) {128; CHECK-LABEL: test_load_post_v4bf16:129; CHECK:       // %bb.0:130; CHECK-NEXT:    ldr d0, [x0], #8131; CHECK-NEXT:    ret132  %val = load <4 x bfloat>, ptr %ptr133  %res.tmp = insertvalue { <4 x bfloat>, ptr } undef, <4 x bfloat> %val, 0134  %next = getelementptr <4 x bfloat>, ptr %ptr, i32 1135  %res = insertvalue { <4 x bfloat>, ptr } %res.tmp, ptr %next, 1136  ret { <4 x bfloat>, ptr } %res137}138 139define { <8 x bfloat>, ptr } @test_load_post_v8bf16(ptr %ptr) {140; CHECK-LABEL: test_load_post_v8bf16:141; CHECK:       // %bb.0:142; CHECK-NEXT:    ldr q0, [x0], #16143; CHECK-NEXT:    ret144  %val = load <8 x bfloat>, ptr %ptr145  %res.tmp = insertvalue { <8 x bfloat>, ptr } undef, <8 x bfloat> %val, 0146  %next = getelementptr <8 x bfloat>, ptr %ptr, i32 1147  %res = insertvalue { <8 x bfloat>, ptr } %res.tmp, ptr %next, 1148  ret { <8 x bfloat>, ptr } %res149}150 151define ptr @test_store_pre(bfloat %val, ptr %ptr) {152; CHECK-LABEL: test_store_pre:153; CHECK:       // %bb.0:154; CHECK-NEXT:    str h0, [x0, #2]!155; CHECK-NEXT:    ret156  %next = getelementptr bfloat, ptr %ptr, i32 1157  store bfloat %val, ptr %next158  ret ptr %next159}160 161define ptr @test_store_pre_v4bf16(<4 x bfloat> %val, ptr %ptr) {162; CHECK-LABEL: test_store_pre_v4bf16:163; CHECK:       // %bb.0:164; CHECK-NEXT:    str d0, [x0, #8]!165; CHECK-NEXT:    ret166  %next = getelementptr <4 x bfloat>, ptr %ptr, i32 1167  store <4 x bfloat> %val, ptr %next168  ret ptr %next169}170 171define ptr @test_store_pre_v8bf16(<8 x bfloat> %val, ptr %ptr) {172; CHECK-LABEL: test_store_pre_v8bf16:173; CHECK:       // %bb.0:174; CHECK-NEXT:    str q0, [x0, #16]!175; CHECK-NEXT:    ret176  %next = getelementptr <8 x bfloat>, ptr %ptr, i32 1177  store <8 x bfloat> %val, ptr %next178  ret ptr %next179}180 181define ptr @test_store_pre_v8bf16_trunc(ptr %ptr) {182; CHECK-LABEL: test_store_pre_v8bf16_trunc:183; CHECK:       // %bb.0:184; CHECK-NEXT:    ldr q0, [x0]185; CHECK-NEXT:    str q0, [x0, #16]!186; CHECK-NEXT:    ret187  %t = load <8 x bfloat>, ptr %ptr188  %next = getelementptr <8 x bfloat>, ptr %ptr, i32 1189  store <8 x bfloat> %t, ptr %next190  ret ptr %next191}192 193define { bfloat, ptr } @test_load_pre(ptr %ptr) {194; CHECK-LABEL: test_load_pre:195; CHECK:       // %bb.0:196; CHECK-NEXT:    ldr h0, [x0, #2]!197; CHECK-NEXT:    ret198  %next = getelementptr bfloat, ptr %ptr, i32 1199  %val = load bfloat, ptr %next200  %res.tmp = insertvalue { bfloat, ptr } undef, bfloat %val, 0201  %res = insertvalue { bfloat, ptr } %res.tmp, ptr %next, 1202  ret { bfloat, ptr } %res203}204 205define { <4 x bfloat>, ptr } @test_load_pre_v4bf16(ptr %ptr) {206; CHECK-LABEL: test_load_pre_v4bf16:207; CHECK:       // %bb.0:208; CHECK-NEXT:    ldr d0, [x0, #8]!209; CHECK-NEXT:    ret210  %next = getelementptr <4 x bfloat>, ptr %ptr, i32 1211  %val = load <4 x bfloat>, ptr %next212  %res.tmp = insertvalue { <4 x bfloat>, ptr } undef, <4 x bfloat> %val, 0213  %res = insertvalue { <4 x bfloat>, ptr } %res.tmp, ptr %next, 1214  ret { <4 x bfloat>, ptr } %res215}216 217define { <8 x bfloat>, ptr } @test_load_pre_v8bf16(ptr %ptr) {218; CHECK-LABEL: test_load_pre_v8bf16:219; CHECK:       // %bb.0:220; CHECK-NEXT:    ldr q0, [x0, #16]!221; CHECK-NEXT:    ret222  %next = getelementptr <8 x bfloat>, ptr %ptr, i32 1223  %val = load <8 x bfloat>, ptr %next224  %res.tmp = insertvalue { <8 x bfloat>, ptr } undef, <8 x bfloat> %val, 0225  %res = insertvalue { <8 x bfloat>, ptr } %res.tmp, ptr %next, 1226  ret { <8 x bfloat>, ptr } %res227}228 229define bfloat @test_bitcast_halftobfloat(half %a) nounwind {230; CHECK-LABEL: test_bitcast_halftobfloat:231; CHECK:       // %bb.0:232; CHECK-NEXT:    ret233  %r = bitcast half %a to bfloat234  ret bfloat %r235}236 237define half @test_bitcast_bfloattohalf(bfloat %a) nounwind {238; CHECK-LABEL: test_bitcast_bfloattohalf:239; CHECK:       // %bb.0:240; CHECK-NEXT:    ret241  %r = bitcast bfloat %a to half242  ret half %r243}244