mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-10-21 03:06:17 +00:00
## Description Applies LLVM patches that have not been backported to the major version used in our submodule: * [LLVM PR #163679](https://github.com/llvm/llvm-project/pull/163679) * *"[RISCV] Allow large div peephole optimization for minsize"* * Fixes peephole optimization of large integers when `minsize` function attribute is set. * (Our revive codebase used a workaround that can be removed once this 500 PR is merged and we publish a new LLVM release.) * [LLVM PR #190219](https://github.com/llvm/llvm-project/pull/190219) * *"[TargetLowering] Speculative fix for a non-determinism issue between different compilers"* * Operand ordering of `mul i256` were different depending on the target ABI when building LLVM, producing different RISC-V and PVM bytecode for our Windows vs macOS/linux builds. * The bytecode divergence (yet functionally equivalent) affected Solidity contracts containing a value [multiplied by itself](https://github.com/llvm/llvm-project/issues/190148) (e.g. via explicit squaring or exponentiation), manifesting primarily when using optimization level `-O0`.
56 lines
1.3 KiB
Rust
56 lines
1.3 KiB
Rust
use assert_fs::TempDir;
|
|
|
|
pub const REVIVE_LLVM: &str = "revive-llvm";
|
|
|
|
pub struct TestDir {
|
|
_tempdir: TempDir,
|
|
path: std::path::PathBuf,
|
|
}
|
|
|
|
/// Creates a temporary directory for testing with submodule setup.
|
|
impl TestDir {
|
|
pub fn new() -> anyhow::Result<Self> {
|
|
let tempdir = TempDir::new()?;
|
|
let tmppath = tempdir.path();
|
|
|
|
// Initialize a git repo and add the LLVM submodule
|
|
std::process::Command::new("git")
|
|
.args(["init"])
|
|
.current_dir(tmppath)
|
|
.output()?;
|
|
|
|
std::process::Command::new("git")
|
|
.args([
|
|
"submodule",
|
|
"add",
|
|
"-b",
|
|
"release/21.x",
|
|
"https://github.com/llvm/llvm-project.git",
|
|
"llvm",
|
|
])
|
|
.current_dir(tmppath)
|
|
.output()?;
|
|
|
|
std::process::Command::new("git")
|
|
.args([
|
|
"submodule",
|
|
"update",
|
|
"--init",
|
|
"--recursive",
|
|
"--force",
|
|
"--depth 1",
|
|
])
|
|
.current_dir(tmppath)
|
|
.output()?;
|
|
|
|
Ok(Self {
|
|
path: tmppath.to_path_buf(),
|
|
_tempdir: tempdir,
|
|
})
|
|
}
|
|
|
|
pub fn path(&self) -> &std::path::Path {
|
|
&self.path
|
|
}
|
|
}
|