@@ -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
+ %one = llvm.mlir.constant (1 : i32 ) : i32
30
+ %alloca = llvm.alloca %one x i32 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
31
+ %memset_len = llvm.mlir.constant (4 : i32 ) : i32
32
+ " llvm.intr.memset" (%alloca , %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
+ %load = llvm.load %alloca {alignment = 4 : i64 } : !llvm.ptr -> f32
44
+ // CHECK: llvm.return %[[VALUE_FLOAT]] : f32
45
+ llvm.return %load : 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 {
@@ -53,36 +77,37 @@ llvm.func @basic_memset_constant() -> i32 {
53
77
%memset_len = llvm.mlir.constant (4 : i32 ) : i32
54
78
" llvm.intr.memset" (%1 , %memset_value , %memset_len ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
55
79
%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
80
+ // CHECK: %[[CONSTANT_VAL:..*]] = llvm.mlir.constant(707406378 : i32) : i32
81
+ // CHECK: llvm.return %[[CONSTANT_VAL]] : i32
65
82
llvm.return %2 : i32
66
83
}
67
84
68
85
// -----
69
86
87
+ // CHECK-LABEL: llvm.func @memset_one_byte_constant
88
+ llvm.func @memset_one_byte_constant () -> i8 {
89
+ %one = llvm.mlir.constant (1 : i32 ) : i32
90
+ %alloca = llvm.alloca %one x i8 : (i32 ) -> !llvm.ptr
91
+ // CHECK: %{{.+}} = llvm.mlir.constant(42 : i8) : i8
92
+ %value = llvm.mlir.constant (42 : i8 ) : i8
93
+ " llvm.intr.memset" (%alloca , %value , %one ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
94
+ %load = llvm.load %alloca : !llvm.ptr -> i8
95
+ // CHECK: %[[CONSTANT_VAL:..*]] = llvm.mlir.constant(42 : i8) : i8
96
+ // CHECK: llvm.return %[[CONSTANT_VAL]] : i8
97
+ llvm.return %load : i8
98
+ }
99
+
100
+ // -----
101
+
70
102
// CHECK-LABEL: llvm.func @basic_memset_inline_constant
71
103
llvm.func @basic_memset_inline_constant () -> i32 {
72
104
%0 = llvm.mlir.constant (1 : i32 ) : i32
73
105
%1 = llvm.alloca %0 x i32 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
74
106
%memset_value = llvm.mlir.constant (42 : i8 ) : i8
75
107
" llvm.intr.memset.inline" (%1 , %memset_value ) <{isVolatile = false , len = 4 }> : (!llvm.ptr , i8 ) -> ()
76
108
%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
109
+ // CHECK: %[[CONSTANT_VAL:..*]] = llvm.mlir.constant(707406378 : i32) : i32
110
+ // CHECK: llvm.return %[[CONSTANT_VAL]] : i32
86
111
llvm.return %2 : i32
87
112
}
88
113
0 commit comments