@@ -23,6 +23,30 @@ llvm.func @basic_memset(%memset_value: i8) -> i32 {
23
23
24
24
// -----
25
25
26
+ // CHECK-LABEL: llvm.func @memset_float
27
+ // CHECK-SAME: (%[[MEMSET_VALUE:.*]]: i8)
28
+ llvm.func @memset_float (%memset_value: i8 ) -> f32 {
29
+ %0 = llvm.mlir.constant (1 : i32 ) : i32
30
+ %1 = llvm.alloca %0 x i32 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
31
+ %memset_len = llvm.mlir.constant (4 : i32 ) : i32
32
+ " llvm.intr.memset" (%1 , %memset_value , %memset_len ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
33
+ // CHECK-NOT: "llvm.intr.memset"
34
+ // CHECK: %[[VALUE_8:.*]] = llvm.zext %[[MEMSET_VALUE]] : i8 to i32
35
+ // CHECK: %[[C8:.*]] = llvm.mlir.constant(8 : i32) : i32
36
+ // CHECK: %[[SHIFTED_8:.*]] = llvm.shl %[[VALUE_8]], %[[C8]]
37
+ // CHECK: %[[VALUE_16:.*]] = llvm.or %[[VALUE_8]], %[[SHIFTED_8]]
38
+ // CHECK: %[[C16:.*]] = llvm.mlir.constant(16 : i32) : i32
39
+ // CHECK: %[[SHIFTED_16:.*]] = llvm.shl %[[VALUE_16]], %[[C16]]
40
+ // CHECK: %[[VALUE_32:.*]] = llvm.or %[[VALUE_16]], %[[SHIFTED_16]]
41
+ // CHECK: %[[VALUE_FLOAT:.+]] = llvm.bitcast %[[VALUE_32]] : i32 to f32
42
+ // CHECK-NOT: "llvm.intr.memset"
43
+ %2 = llvm.load %1 {alignment = 4 : i64 } : !llvm.ptr -> f32
44
+ // CHECK: llvm.return %[[VALUE_FLOAT]] : f32
45
+ llvm.return %2 : f32
46
+ }
47
+
48
+ // -----
49
+
26
50
// CHECK-LABEL: llvm.func @basic_memset_inline
27
51
// CHECK-SAME: (%[[MEMSET_VALUE:.*]]: i8)
28
52
llvm.func @basic_memset_inline (%memset_value: i8 ) -> i32 {
@@ -45,6 +69,29 @@ llvm.func @basic_memset_inline(%memset_value: i8) -> i32 {
45
69
46
70
// -----
47
71
72
+ // CHECK-LABEL: llvm.func @memset_inline_float
73
+ // CHECK-SAME: (%[[MEMSET_VALUE:.*]]: i8)
74
+ llvm.func @memset_inline_float (%memset_value: i8 ) -> f32 {
75
+ %0 = llvm.mlir.constant (1 : i32 ) : i32
76
+ %1 = llvm.alloca %0 x f32 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
77
+ " llvm.intr.memset.inline" (%1 , %memset_value ) <{isVolatile = false , len = 4 : i32 }> : (!llvm.ptr , i8 ) -> ()
78
+ // CHECK-NOT: "llvm.intr.memset.inline"
79
+ // CHECK: %[[VALUE_8:.*]] = llvm.zext %[[MEMSET_VALUE]] : i8 to i32
80
+ // CHECK: %[[C8:.*]] = llvm.mlir.constant(8 : i32) : i32
81
+ // CHECK: %[[SHIFTED_8:.*]] = llvm.shl %[[VALUE_8]], %[[C8]]
82
+ // CHECK: %[[VALUE_16:.*]] = llvm.or %[[VALUE_8]], %[[SHIFTED_8]]
83
+ // CHECK: %[[C16:.*]] = llvm.mlir.constant(16 : i32) : i32
84
+ // CHECK: %[[SHIFTED_16:.*]] = llvm.shl %[[VALUE_16]], %[[C16]]
85
+ // CHECK: %[[VALUE_32:.*]] = llvm.or %[[VALUE_16]], %[[SHIFTED_16]]
86
+ // CHECK: %[[VALUE_FLOAT:.+]] = llvm.bitcast %[[VALUE_32]] : i32 to f32
87
+ // CHECK-NOT: "llvm.intr.memset.inline"
88
+ %2 = llvm.load %1 {alignment = 4 : i64 } : !llvm.ptr -> f32
89
+ // CHECK: llvm.return %[[VALUE_FLOAT]] : f32
90
+ llvm.return %2 : f32
91
+ }
92
+
93
+ // -----
94
+
48
95
// CHECK-LABEL: llvm.func @basic_memset_constant
49
96
llvm.func @basic_memset_constant () -> i32 {
50
97
%0 = llvm.mlir.constant (1 : i32 ) : i32
@@ -53,15 +100,8 @@ llvm.func @basic_memset_constant() -> i32 {
53
100
%memset_len = llvm.mlir.constant (4 : i32 ) : i32
54
101
" llvm.intr.memset" (%1 , %memset_value , %memset_len ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
55
102
%2 = llvm.load %1 {alignment = 4 : i64 } : !llvm.ptr -> i32
56
- // CHECK: %[[C42:.*]] = llvm.mlir.constant(42 : i8) : i8
57
- // CHECK: %[[VALUE_42:.*]] = llvm.zext %[[C42]] : i8 to i32
58
- // CHECK: %[[C8:.*]] = llvm.mlir.constant(8 : i32) : i32
59
- // CHECK: %[[SHIFTED_42:.*]] = llvm.shl %[[VALUE_42]], %[[C8]] : i32
60
- // CHECK: %[[OR0:.*]] = llvm.or %[[VALUE_42]], %[[SHIFTED_42]] : i32
61
- // CHECK: %[[C16:.*]] = llvm.mlir.constant(16 : i32) : i32
62
- // CHECK: %[[SHIFTED:.*]] = llvm.shl %[[OR0]], %[[C16]] : i32
63
- // CHECK: %[[RES:..*]] = llvm.or %[[OR0]], %[[SHIFTED]] : i32
64
- // CHECK: llvm.return %[[RES]] : i32
103
+ // CHECK: %[[CONSTANT_VAL:..*]] = llvm.mlir.constant(707406378 : i32) : i32
104
+ // CHECK: llvm.return %[[CONSTANT_VAL]] : i32
65
105
llvm.return %2 : i32
66
106
}
67
107
@@ -74,15 +114,8 @@ llvm.func @basic_memset_inline_constant() -> i32 {
74
114
%memset_value = llvm.mlir.constant (42 : i8 ) : i8
75
115
" llvm.intr.memset.inline" (%1 , %memset_value ) <{isVolatile = false , len = 4 }> : (!llvm.ptr , i8 ) -> ()
76
116
%2 = llvm.load %1 {alignment = 4 : i64 } : !llvm.ptr -> i32
77
- // CHECK: %[[C42:.*]] = llvm.mlir.constant(42 : i8) : i8
78
- // CHECK: %[[VALUE_42:.*]] = llvm.zext %[[C42]] : i8 to i32
79
- // CHECK: %[[C8:.*]] = llvm.mlir.constant(8 : i32) : i32
80
- // CHECK: %[[SHIFTED_42:.*]] = llvm.shl %[[VALUE_42]], %[[C8]] : i32
81
- // CHECK: %[[OR0:.*]] = llvm.or %[[VALUE_42]], %[[SHIFTED_42]] : i32
82
- // CHECK: %[[C16:.*]] = llvm.mlir.constant(16 : i32) : i32
83
- // CHECK: %[[SHIFTED:.*]] = llvm.shl %[[OR0]], %[[C16]] : i32
84
- // CHECK: %[[RES:..*]] = llvm.or %[[OR0]], %[[SHIFTED]] : i32
85
- // CHECK: llvm.return %[[RES]] : i32
117
+ // CHECK: %[[CONSTANT_VAL:..*]] = llvm.mlir.constant(707406378 : i32) : i32
118
+ // CHECK: llvm.return %[[CONSTANT_VAL]] : i32
86
119
llvm.return %2 : i32
87
120
}
88
121
0 commit comments