@@ -23,6 +23,30 @@ llvm.func @basic_memset(%memset_value: i8) -> i32 {
2323
2424// -----
2525
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+
2650// CHECK-LABEL: llvm.func @basic_memset_inline
2751// CHECK-SAME: (%[[MEMSET_VALUE:.*]]: i8)
2852llvm.func @basic_memset_inline (%memset_value: i8 ) -> i32 {
@@ -53,36 +77,37 @@ llvm.func @basic_memset_constant() -> i32 {
5377 %memset_len = llvm.mlir.constant (4 : i32 ) : i32
5478 " llvm.intr.memset" (%1 , %memset_value , %memset_len ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
5579 %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
6582 llvm.return %2 : i32
6683}
6784
6885// -----
6986
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+
70102// CHECK-LABEL: llvm.func @basic_memset_inline_constant
71103llvm.func @basic_memset_inline_constant () -> i32 {
72104 %0 = llvm.mlir.constant (1 : i32 ) : i32
73105 %1 = llvm.alloca %0 x i32 {alignment = 4 : i64 } : (i32 ) -> !llvm.ptr
74106 %memset_value = llvm.mlir.constant (42 : i8 ) : i8
75107 " llvm.intr.memset.inline" (%1 , %memset_value ) <{isVolatile = false , len = 4 }> : (!llvm.ptr , i8 ) -> ()
76108 %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
86111 llvm.return %2 : i32
87112}
88113
0 commit comments