1
1
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2
2
// RUN: %clang_cc1 -triple riscv64 -target-feature +zbb -emit-llvm %s -o - \
3
+ // RUN: -disable-O0-optnone | opt -S -passes=mem2reg \
3
4
// RUN: | FileCheck %s -check-prefix=RV64ZBB
4
5
5
6
// RV64ZBB-LABEL: @orc_b_32(
6
7
// RV64ZBB-NEXT: entry:
7
- // RV64ZBB-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
8
- // RV64ZBB-NEXT: store i32 [[A:%.*]], ptr [[A_ADDR]], align 4
9
- // RV64ZBB-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
10
- // RV64ZBB-NEXT: [[TMP1:%.*]] = call i32 @llvm.riscv.orc.b.i32(i32 [[TMP0]])
11
- // RV64ZBB-NEXT: ret i32 [[TMP1]]
8
+ // RV64ZBB-NEXT: [[TMP0:%.*]] = call i32 @llvm.riscv.orc.b.i32(i32 [[A:%.*]])
9
+ // RV64ZBB-NEXT: ret i32 [[TMP0]]
12
10
//
13
11
unsigned int orc_b_32 (unsigned int a ) {
14
12
return __builtin_riscv_orc_b_32 (a );
15
13
}
16
14
17
15
// RV64ZBB-LABEL: @orc_b_64(
18
16
// RV64ZBB-NEXT: entry:
19
- // RV64ZBB-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8
20
- // RV64ZBB-NEXT: store i64 [[A:%.*]], ptr [[A_ADDR]], align 8
21
- // RV64ZBB-NEXT: [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 8
22
- // RV64ZBB-NEXT: [[TMP1:%.*]] = call i64 @llvm.riscv.orc.b.i64(i64 [[TMP0]])
23
- // RV64ZBB-NEXT: ret i64 [[TMP1]]
17
+ // RV64ZBB-NEXT: [[TMP0:%.*]] = call i64 @llvm.riscv.orc.b.i64(i64 [[A:%.*]])
18
+ // RV64ZBB-NEXT: ret i64 [[TMP0]]
24
19
//
25
20
unsigned long orc_b_64 (unsigned long a ) {
26
21
return __builtin_riscv_orc_b_64 (a );
27
22
}
28
23
29
24
// RV64ZBB-LABEL: @clz_32(
30
25
// RV64ZBB-NEXT: entry:
31
- // RV64ZBB-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
32
- // RV64ZBB-NEXT: store i32 [[A:%.*]], ptr [[A_ADDR]], align 4
33
- // RV64ZBB-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
34
- // RV64ZBB-NEXT: [[TMP1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[TMP0]], i1 false)
35
- // RV64ZBB-NEXT: ret i32 [[TMP1]]
26
+ // RV64ZBB-NEXT: [[TMP0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[A:%.*]], i1 false)
27
+ // RV64ZBB-NEXT: ret i32 [[TMP0]]
36
28
//
37
29
unsigned int clz_32 (unsigned int a ) {
38
30
return __builtin_riscv_clz_32 (a );
39
31
}
40
32
41
33
// RV64ZBB-LABEL: @clz_64(
42
34
// RV64ZBB-NEXT: entry:
43
- // RV64ZBB-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8
44
- // RV64ZBB-NEXT: store i64 [[A:%.*]], ptr [[A_ADDR]], align 8
45
- // RV64ZBB-NEXT: [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 8
46
- // RV64ZBB-NEXT: [[TMP1:%.*]] = call i64 @llvm.ctlz.i64(i64 [[TMP0]], i1 false)
47
- // RV64ZBB-NEXT: [[CAST:%.*]] = trunc i64 [[TMP1]] to i32
35
+ // RV64ZBB-NEXT: [[TMP0:%.*]] = call i64 @llvm.ctlz.i64(i64 [[A:%.*]], i1 false)
36
+ // RV64ZBB-NEXT: [[CAST:%.*]] = trunc i64 [[TMP0]] to i32
48
37
// RV64ZBB-NEXT: ret i32 [[CAST]]
49
38
//
50
39
unsigned int clz_64 (unsigned long a ) {
@@ -53,23 +42,17 @@ unsigned int clz_64(unsigned long a) {
53
42
54
43
// RV64ZBB-LABEL: @ctz_32(
55
44
// RV64ZBB-NEXT: entry:
56
- // RV64ZBB-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4
57
- // RV64ZBB-NEXT: store i32 [[A:%.*]], ptr [[A_ADDR]], align 4
58
- // RV64ZBB-NEXT: [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
59
- // RV64ZBB-NEXT: [[TMP1:%.*]] = call i32 @llvm.cttz.i32(i32 [[TMP0]], i1 false)
60
- // RV64ZBB-NEXT: ret i32 [[TMP1]]
45
+ // RV64ZBB-NEXT: [[TMP0:%.*]] = call i32 @llvm.cttz.i32(i32 [[A:%.*]], i1 false)
46
+ // RV64ZBB-NEXT: ret i32 [[TMP0]]
61
47
//
62
48
unsigned int ctz_32 (unsigned int a ) {
63
49
return __builtin_riscv_ctz_32 (a );
64
50
}
65
51
66
52
// RV64ZBB-LABEL: @ctz_64(
67
53
// RV64ZBB-NEXT: entry:
68
- // RV64ZBB-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8
69
- // RV64ZBB-NEXT: store i64 [[A:%.*]], ptr [[A_ADDR]], align 8
70
- // RV64ZBB-NEXT: [[TMP0:%.*]] = load i64, ptr [[A_ADDR]], align 8
71
- // RV64ZBB-NEXT: [[TMP1:%.*]] = call i64 @llvm.cttz.i64(i64 [[TMP0]], i1 false)
72
- // RV64ZBB-NEXT: [[CAST:%.*]] = trunc i64 [[TMP1]] to i32
54
+ // RV64ZBB-NEXT: [[TMP0:%.*]] = call i64 @llvm.cttz.i64(i64 [[A:%.*]], i1 false)
55
+ // RV64ZBB-NEXT: [[CAST:%.*]] = trunc i64 [[TMP0]] to i32
73
56
// RV64ZBB-NEXT: ret i32 [[CAST]]
74
57
//
75
58
unsigned int ctz_64 (unsigned long a ) {
0 commit comments