@@ -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+ %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+
2650// CHECK-LABEL: llvm.func @basic_memset_inline
2751// CHECK-SAME: (%[[MEMSET_VALUE:.*]]: i8)
2852llvm.func @basic_memset_inline (%memset_value: i8 ) -> i32 {
@@ -45,6 +69,29 @@ llvm.func @basic_memset_inline(%memset_value: i8) -> i32 {
4569
4670// -----
4771
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+
4895// CHECK-LABEL: llvm.func @basic_memset_constant
4996llvm.func @basic_memset_constant () -> i32 {
5097 %0 = llvm.mlir.constant (1 : i32 ) : i32
@@ -53,15 +100,8 @@ llvm.func @basic_memset_constant() -> i32 {
53100 %memset_len = llvm.mlir.constant (4 : i32 ) : i32
54101 " llvm.intr.memset" (%1 , %memset_value , %memset_len ) <{isVolatile = false }> : (!llvm.ptr , i8 , i32 ) -> ()
55102 %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
65105 llvm.return %2 : i32
66106}
67107
@@ -74,15 +114,8 @@ llvm.func @basic_memset_inline_constant() -> i32 {
74114 %memset_value = llvm.mlir.constant (42 : i8 ) : i8
75115 " llvm.intr.memset.inline" (%1 , %memset_value ) <{isVolatile = false , len = 4 }> : (!llvm.ptr , i8 ) -> ()
76116 %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
86119 llvm.return %2 : i32
87120}
88121
0 commit comments