1- // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 4
2- // RUN: %clang_cc1 -emit-llvm -triple aarch64-arm-none-eabi -target-feature -fp8 -o - %s | FileCheck %s
1+ // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2+ // RUN: %clang_cc1 -emit-llvm -triple aarch64-arm-none-eabi -target-feature -fp8 -target-feature +neon -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-C
3+ // RUN: %clang_cc1 -emit-llvm -triple aarch64-arm-none-eabi -target-feature -fp8 -target-feature +neon -o - -x c++ %s | FileCheck %s --check-prefixes=CHECK,CHECK-CXX
34
45// REQUIRES: aarch64-registered-target
56
6- // CHECK-LABEL: define dso_local i8 @func1n(
7- // CHECK-SAME: i8 noundef [[MFP8:%.*]]) #[[ATTR0:[0-9]+]] {
8- // CHECK-NEXT: entry:
9- // CHECK-NEXT: [[MFP8_ADDR:%.*]] = alloca i8, align 1
10- // CHECK-NEXT: [[F1N:%.*]] = alloca [10 x i8], align 1
11- // CHECK-NEXT: store i8 [[MFP8]], ptr [[MFP8_ADDR]], align 1
12- // CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[MFP8_ADDR]], align 1
13- // CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x i8], ptr [[F1N]], i64 0, i64 2
14- // CHECK-NEXT: store i8 [[TMP0]], ptr [[ARRAYIDX]], align 1
15- // CHECK-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds [10 x i8], ptr [[F1N]], i64 0, i64 2
16- // CHECK-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
17- // CHECK-NEXT: ret i8 [[TMP1]]
7+ // CHECK-C-LABEL: define dso_local i8 @func1n(
8+ // CHECK-C-SAME: i8 noundef [[MFP8:%.*]]) #[[ATTR0:[0-9]+]] {
9+ // CHECK-C-NEXT: [[ENTRY:.*:]]
10+ // CHECK-C-NEXT: [[MFP8_ADDR:%.*]] = alloca i8, align 1
11+ // CHECK-C-NEXT: [[F1N:%.*]] = alloca [10 x i8], align 1
12+ // CHECK-C-NEXT: store i8 [[MFP8]], ptr [[MFP8_ADDR]], align 1
13+ // CHECK-C-NEXT: [[TMP0:%.*]] = load i8, ptr [[MFP8_ADDR]], align 1
14+ // CHECK-C-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x i8], ptr [[F1N]], i64 0, i64 2
15+ // CHECK-C-NEXT: store i8 [[TMP0]], ptr [[ARRAYIDX]], align 1
16+ // CHECK-C-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds [10 x i8], ptr [[F1N]], i64 0, i64 2
17+ // CHECK-C-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
18+ // CHECK-C-NEXT: ret i8 [[TMP1]]
19+ //
20+ // CHECK-CXX-LABEL: define dso_local noundef i8 @_Z6func1nw(
21+ // CHECK-CXX-SAME: i8 noundef [[MFP8:%.*]]) #[[ATTR0:[0-9]+]] {
22+ // CHECK-CXX-NEXT: [[ENTRY:.*:]]
23+ // CHECK-CXX-NEXT: [[MFP8_ADDR:%.*]] = alloca i8, align 1
24+ // CHECK-CXX-NEXT: [[F1N:%.*]] = alloca [10 x i8], align 1
25+ // CHECK-CXX-NEXT: store i8 [[MFP8]], ptr [[MFP8_ADDR]], align 1
26+ // CHECK-CXX-NEXT: [[TMP0:%.*]] = load i8, ptr [[MFP8_ADDR]], align 1
27+ // CHECK-CXX-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [10 x i8], ptr [[F1N]], i64 0, i64 2
28+ // CHECK-CXX-NEXT: store i8 [[TMP0]], ptr [[ARRAYIDX]], align 1
29+ // CHECK-CXX-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds [10 x i8], ptr [[F1N]], i64 0, i64 2
30+ // CHECK-CXX-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1
31+ // CHECK-CXX-NEXT: ret i8 [[TMP1]]
1832//
1933__mfp8 func1n (__mfp8 mfp8 ) {
2034 __mfp8 f1n [10 ];
@@ -23,4 +37,47 @@ __mfp8 func1n(__mfp8 mfp8) {
2337}
2438
2539
40+ #include <arm_neon.h>
41+
42+ // CHECK-C-LABEL: define dso_local <16 x i8> @test_ret_mfloat8x16_t(
43+ // CHECK-C-SAME: <16 x i8> noundef [[V:%.*]]) #[[ATTR0]] {
44+ // CHECK-C-NEXT: [[ENTRY:.*:]]
45+ // CHECK-C-NEXT: [[V_ADDR:%.*]] = alloca <16 x i8>, align 16
46+ // CHECK-C-NEXT: store <16 x i8> [[V]], ptr [[V_ADDR]], align 16
47+ // CHECK-C-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr [[V_ADDR]], align 16
48+ // CHECK-C-NEXT: ret <16 x i8> [[TMP0]]
49+ //
50+ // CHECK-CXX-LABEL: define dso_local noundef <16 x i8> @_Z21test_ret_mfloat8x16_t16__MFloat8_tx16_t(
51+ // CHECK-CXX-SAME: <16 x i8> noundef [[V:%.*]]) #[[ATTR0]] {
52+ // CHECK-CXX-NEXT: [[ENTRY:.*:]]
53+ // CHECK-CXX-NEXT: [[V_ADDR:%.*]] = alloca <16 x i8>, align 16
54+ // CHECK-CXX-NEXT: store <16 x i8> [[V]], ptr [[V_ADDR]], align 16
55+ // CHECK-CXX-NEXT: [[TMP0:%.*]] = load <16 x i8>, ptr [[V_ADDR]], align 16
56+ // CHECK-CXX-NEXT: ret <16 x i8> [[TMP0]]
57+ //
58+ mfloat8x16_t test_ret_mfloat8x16_t (mfloat8x16_t v ) {
59+ return v ;
60+ }
61+
62+ // CHECK-C-LABEL: define dso_local <8 x i8> @test_ret_mfloat8x8_t(
63+ // CHECK-C-SAME: <8 x i8> noundef [[V:%.*]]) #[[ATTR0]] {
64+ // CHECK-C-NEXT: [[ENTRY:.*:]]
65+ // CHECK-C-NEXT: [[V_ADDR:%.*]] = alloca <8 x i8>, align 8
66+ // CHECK-C-NEXT: store <8 x i8> [[V]], ptr [[V_ADDR]], align 8
67+ // CHECK-C-NEXT: [[TMP0:%.*]] = load <8 x i8>, ptr [[V_ADDR]], align 8
68+ // CHECK-C-NEXT: ret <8 x i8> [[TMP0]]
69+ //
70+ // CHECK-CXX-LABEL: define dso_local noundef <8 x i8> @_Z20test_ret_mfloat8x8_t15__MFloat8_tx8_t(
71+ // CHECK-CXX-SAME: <8 x i8> noundef [[V:%.*]]) #[[ATTR0]] {
72+ // CHECK-CXX-NEXT: [[ENTRY:.*:]]
73+ // CHECK-CXX-NEXT: [[V_ADDR:%.*]] = alloca <8 x i8>, align 8
74+ // CHECK-CXX-NEXT: store <8 x i8> [[V]], ptr [[V_ADDR]], align 8
75+ // CHECK-CXX-NEXT: [[TMP0:%.*]] = load <8 x i8>, ptr [[V_ADDR]], align 8
76+ // CHECK-CXX-NEXT: ret <8 x i8> [[TMP0]]
77+ //
78+ mfloat8x8_t test_ret_mfloat8x8_t (mfloat8x8_t v ) {
79+ return v ;
80+ }
2681
82+ //// NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
83+ // CHECK: {{.*}}
0 commit comments