Skip to content

Commit 6d19a97

Browse files
[CIR][CodeGen] Add support for x86 memory fence (#1519)
1 parent 9ec10f9 commit 6d19a97

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ mlir::Value CIRGenFunction::emitX86BuiltinExpr(unsigned BuiltinID,
113113
voidTy)
114114
.getResult();
115115
}
116-
117116
case X86::BI_mm_pause: {
118117
mlir::Type voidTy = cir::VoidType::get(&getMLIRContext());
119118
return builder
@@ -122,5 +121,21 @@ mlir::Value CIRGenFunction::emitX86BuiltinExpr(unsigned BuiltinID,
122121
voidTy)
123122
.getResult();
124123
}
124+
case X86::BI_mm_mfence: {
125+
mlir::Type voidTy = cir::VoidType::get(&getMLIRContext());
126+
return builder
127+
.create<cir::LLVMIntrinsicCallOp>(
128+
getLoc(E->getExprLoc()), builder.getStringAttr("x86.sse2.mfence"),
129+
voidTy)
130+
.getResult();
131+
}
132+
case X86::BI_mm_sfence: {
133+
mlir::Type voidTy = cir::VoidType::get(&getMLIRContext());
134+
return builder
135+
.create<cir::LLVMIntrinsicCallOp>(
136+
getLoc(E->getExprLoc()), builder.getStringAttr("x86.sse.sfence"),
137+
voidTy)
138+
.getResult();
139+
}
125140
}
126141
}

clang/test/CIR/CodeGen/X86/builtins-x86.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,21 @@ void test_mm_pause() {
2929
// CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse2.pause" : () -> !void
3030
// LLVM: call void @llvm.x86.sse2.pause()
3131
}
32+
33+
void test_mm_mfence() {
34+
// CIR-LABEL: test_mm_mfence
35+
// LLVM-LABEL: test_mm_mfence
36+
_mm_mfence();
37+
// CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse2.mfence" : () -> !void
38+
// LLVM: call void @llvm.x86.sse2.mfence()
39+
}
40+
41+
void test_mm_sfence() {
42+
// CIR-LABEL: test_mm_sfence
43+
// LLVM-LABEL: test_mm_sfence
44+
_mm_sfence();
45+
// CIR: {{%.*}} = cir.llvm.intrinsic "x86.sse.sfence" : () -> !void
46+
// LLVM: call void @llvm.x86.sse.sfence()
47+
}
48+
49+

0 commit comments

Comments
 (0)