Skip to content

[sparc] SPEC benchmark gcc is miscompiled #516

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
llvmbot opened this issue Nov 21, 2003 · 3 comments
Closed

[sparc] SPEC benchmark gcc is miscompiled #516

llvmbot opened this issue Nov 21, 2003 · 3 comments
Labels
duplicate Resolved as duplicate

Comments

@llvmbot
Copy link
Member

llvmbot commented Nov 21, 2003

Bugzilla Link 144
Resolution DUPLICATE
Resolved on Feb 22, 2010 12:42
Version trunk
OS Solaris
Reporter LLVM Bugzilla Contributor

Extended Description

Neither the JIT or LLC produce correct code for GCC -- they both fail. The CBE
also produces non-working code, but only on SPARC.

@llvmbot
Copy link
Member Author

llvmbot commented Feb 16, 2004

just as an update, 176.gcc still segfaults tonight on LLC, CBE, and the JIT on SPARC.

@lattner
Copy link
Collaborator

lattner commented Feb 25, 2004

*** This bug has been marked as a duplicate of 60 ***

@lattner
Copy link
Collaborator

lattner commented Nov 27, 2021

mentioned in issue #432

@llvmbot llvmbot transferred this issue from llvm/llvm-bugzilla-archive Dec 1, 2021
@Quuxplusone Quuxplusone added the duplicate Resolved as duplicate label Jan 20, 2022
pysuxing pushed a commit to pysuxing/llvm-project that referenced this issue Jul 17, 2024
We start our journey towards `goto` support and this is a first step on
this way.

There are some discussion in llvm#508 and according to the plan we do the
following here:
- a new pass called `cir-flatten-cfg` that is a stub now but later will
be responsible for the regions inlining. The pass works only if
`-emit-flat-cir` is passed in cmd line. Thus, the clang behavior is not
changed here from the user's point of view.
- The pass will be accomplished with `goto` solver later, so we talk
about several passes that are mandatory for the lowering into `llvm`
dialect. There are at least two clients of this pass that will be
affected: `clang` itself and `cir-opt`, so we need a common point for
them: and `populateCIRFlatteningPasses` and `populateCIRToLLVMPasses`
guarantee that `CIR` will be in the correct state for all the clients,
whatever new passes we will add later.
pysuxing pushed a commit to pysuxing/llvm-project that referenced this issue Jul 17, 2024
This PR perform flattening for `cir::IfOp`
Basically, we just move the code from `LowerToLLVM.cpp` to
`FlattenCFG.cpp`.
There are several important things though I would like to highlight.
1) Consider the next code from the tests:
```
cir.func @foo(%arg0: !s32i) -> !s32i {
    %4 = cir.cast(int_to_bool, %arg0 : !s32i), !cir.bool
    cir.if %4 {
      %5 = cir.const(#cir.int<1> : !s32i) : !s32i
      cir.return %5 : !s32i
    } else {
      %5 = cir.const(#cir.int<0> : !s32i) : !s32i
      cir.return %5 : !s32i
    }
    cir.return %arg0 : !s32i
  }
```
The last `cir.return` becomes unreachable after flattening and hence is
not reachable in the lowering. So we got the next error:
```
error: 'cir.return' op expects parent op to be one of 'cir.func, cir.scope, cir.if, cir.switch, cir.do, cir.while, cir.for'
    cir.return %arg0 : !s32i
```
the parent after lowering is `llvm.func`.
And this is only the beginning - the more operations will be flatten,
the more similar fails will happen. Thus, I added lowering for the
unreachable code as well in `LowerToLLVM.cpp`. But may be you have
another solution in your mind.

2) Please, pay attention on the flattening pass - I'm not that familiar
with `mlir` builders as you are, so may be I'm doing something wrong.
The idea was to start flattening from the most nested operations.

3) As you requested in llvm#516, `cir-to-llvm-internal` is renamed to
`cir-flat-to-llvm`. The only thing remain undone is related to the
following:

> Since it would be wrong to run cir-flat-to-llvm without running
cir-flatten-cfg, we should make cir-flat-to-llvm pass to require
cir-flatten-cfg pass to be run before.

And I'm not sure I know how to do it exactly - is there something
similar to pass dependencies from LLVM IR?

4) The part of `IfOp` lowering related to elimination of the vain casts
for condition branch moved directly to the lowering of `BrCondOp` with
some refactoring and guarding.

5) Just note, that now `cir-opt` is able to dump the flat cir as well:
`cir-opt -cir-flat-cfg`
pysuxing pushed a commit to pysuxing/llvm-project that referenced this issue Jul 17, 2024
We start our journey towards `goto` support and this is a first step on
this way.

There are some discussion in llvm#508 and according to the plan we do the
following here:
- a new pass called `cir-flatten-cfg` that is a stub now but later will
be responsible for the regions inlining. The pass works only if
`-emit-flat-cir` is passed in cmd line. Thus, the clang behavior is not
changed here from the user's point of view.
- The pass will be accomplished with `goto` solver later, so we talk
about several passes that are mandatory for the lowering into `llvm`
dialect. There are at least two clients of this pass that will be
affected: `clang` itself and `cir-opt`, so we need a common point for
them: and `populateCIRFlatteningPasses` and `populateCIRToLLVMPasses`
guarantee that `CIR` will be in the correct state for all the clients,
whatever new passes we will add later.
pysuxing pushed a commit to pysuxing/llvm-project that referenced this issue Jul 17, 2024
This PR perform flattening for `cir::IfOp`
Basically, we just move the code from `LowerToLLVM.cpp` to
`FlattenCFG.cpp`.
There are several important things though I would like to highlight.
1) Consider the next code from the tests:
```
cir.func @foo(%arg0: !s32i) -> !s32i {
    %4 = cir.cast(int_to_bool, %arg0 : !s32i), !cir.bool
    cir.if %4 {
      %5 = cir.const(#cir.int<1> : !s32i) : !s32i
      cir.return %5 : !s32i
    } else {
      %5 = cir.const(#cir.int<0> : !s32i) : !s32i
      cir.return %5 : !s32i
    }
    cir.return %arg0 : !s32i
  }
```
The last `cir.return` becomes unreachable after flattening and hence is
not reachable in the lowering. So we got the next error:
```
error: 'cir.return' op expects parent op to be one of 'cir.func, cir.scope, cir.if, cir.switch, cir.do, cir.while, cir.for'
    cir.return %arg0 : !s32i
```
the parent after lowering is `llvm.func`.
And this is only the beginning - the more operations will be flatten,
the more similar fails will happen. Thus, I added lowering for the
unreachable code as well in `LowerToLLVM.cpp`. But may be you have
another solution in your mind.

2) Please, pay attention on the flattening pass - I'm not that familiar
with `mlir` builders as you are, so may be I'm doing something wrong.
The idea was to start flattening from the most nested operations.

3) As you requested in llvm#516, `cir-to-llvm-internal` is renamed to
`cir-flat-to-llvm`. The only thing remain undone is related to the
following:

> Since it would be wrong to run cir-flat-to-llvm without running
cir-flatten-cfg, we should make cir-flat-to-llvm pass to require
cir-flatten-cfg pass to be run before.

And I'm not sure I know how to do it exactly - is there something
similar to pass dependencies from LLVM IR?

4) The part of `IfOp` lowering related to elimination of the vain casts
for condition branch moved directly to the lowering of `BrCondOp` with
some refactoring and guarding.

5) Just note, that now `cir-opt` is able to dump the flat cir as well:
`cir-opt -cir-flat-cfg`
keryell pushed a commit to keryell/llvm-project that referenced this issue Oct 19, 2024
We start our journey towards `goto` support and this is a first step on
this way.

There are some discussion in llvm#508 and according to the plan we do the
following here:
- a new pass called `cir-flatten-cfg` that is a stub now but later will
be responsible for the regions inlining. The pass works only if
`-emit-flat-cir` is passed in cmd line. Thus, the clang behavior is not
changed here from the user's point of view.
- The pass will be accomplished with `goto` solver later, so we talk
about several passes that are mandatory for the lowering into `llvm`
dialect. There are at least two clients of this pass that will be
affected: `clang` itself and `cir-opt`, so we need a common point for
them: and `populateCIRFlatteningPasses` and `populateCIRToLLVMPasses`
guarantee that `CIR` will be in the correct state for all the clients,
whatever new passes we will add later.
keryell pushed a commit to keryell/llvm-project that referenced this issue Oct 19, 2024
This PR perform flattening for `cir::IfOp`
Basically, we just move the code from `LowerToLLVM.cpp` to
`FlattenCFG.cpp`.
There are several important things though I would like to highlight.
1) Consider the next code from the tests:
```
cir.func @foo(%arg0: !s32i) -> !s32i {
    %4 = cir.cast(int_to_bool, %arg0 : !s32i), !cir.bool
    cir.if %4 {
      %5 = cir.const(#cir.int<1> : !s32i) : !s32i
      cir.return %5 : !s32i
    } else {
      %5 = cir.const(#cir.int<0> : !s32i) : !s32i
      cir.return %5 : !s32i
    }
    cir.return %arg0 : !s32i
  }
```
The last `cir.return` becomes unreachable after flattening and hence is
not reachable in the lowering. So we got the next error:
```
error: 'cir.return' op expects parent op to be one of 'cir.func, cir.scope, cir.if, cir.switch, cir.do, cir.while, cir.for'
    cir.return %arg0 : !s32i
```
the parent after lowering is `llvm.func`.
And this is only the beginning - the more operations will be flatten,
the more similar fails will happen. Thus, I added lowering for the
unreachable code as well in `LowerToLLVM.cpp`. But may be you have
another solution in your mind.

2) Please, pay attention on the flattening pass - I'm not that familiar
with `mlir` builders as you are, so may be I'm doing something wrong.
The idea was to start flattening from the most nested operations.

3) As you requested in llvm#516, `cir-to-llvm-internal` is renamed to
`cir-flat-to-llvm`. The only thing remain undone is related to the
following:

> Since it would be wrong to run cir-flat-to-llvm without running
cir-flatten-cfg, we should make cir-flat-to-llvm pass to require
cir-flatten-cfg pass to be run before.

And I'm not sure I know how to do it exactly - is there something
similar to pass dependencies from LLVM IR?

4) The part of `IfOp` lowering related to elimination of the vain casts
for condition branch moved directly to the lowering of `BrCondOp` with
some refactoring and guarding.

5) Just note, that now `cir-opt` is able to dump the flat cir as well:
`cir-opt -cir-flat-cfg`
searlmc1 pushed a commit to ROCm/llvm-project that referenced this issue Feb 12, 2025
…m#96631) (llvm#516)

We can only replace phi(X, undef) with X, if X is known not to be
poison. Otherwise, the result may be more poisonous on the undef branch.

Fixes llvm#68683.

---------

Co-authored-by: Nikita Popov <[email protected]>
xlauko pushed a commit to trailofbits/instafix-llvm that referenced this issue Mar 28, 2025
We start our journey towards `goto` support and this is a first step on
this way.

There are some discussion in llvm#508 and according to the plan we do the
following here:
- a new pass called `cir-flatten-cfg` that is a stub now but later will
be responsible for the regions inlining. The pass works only if
`-emit-flat-cir` is passed in cmd line. Thus, the clang behavior is not
changed here from the user's point of view.
- The pass will be accomplished with `goto` solver later, so we talk
about several passes that are mandatory for the lowering into `llvm`
dialect. There are at least two clients of this pass that will be
affected: `clang` itself and `cir-opt`, so we need a common point for
them: and `populateCIRFlatteningPasses` and `populateCIRToLLVMPasses`
guarantee that `CIR` will be in the correct state for all the clients,
whatever new passes we will add later.
xlauko pushed a commit to trailofbits/instafix-llvm that referenced this issue Mar 28, 2025
This PR perform flattening for `cir::IfOp`
Basically, we just move the code from `LowerToLLVM.cpp` to
`FlattenCFG.cpp`.
There are several important things though I would like to highlight.
1) Consider the next code from the tests:
```
cir.func @foo(%arg0: !s32i) -> !s32i {
    %4 = cir.cast(int_to_bool, %arg0 : !s32i), !cir.bool
    cir.if %4 {
      %5 = cir.const(#cir.int<1> : !s32i) : !s32i
      cir.return %5 : !s32i
    } else {
      %5 = cir.const(#cir.int<0> : !s32i) : !s32i
      cir.return %5 : !s32i
    }
    cir.return %arg0 : !s32i
  }
```
The last `cir.return` becomes unreachable after flattening and hence is
not reachable in the lowering. So we got the next error:
```
error: 'cir.return' op expects parent op to be one of 'cir.func, cir.scope, cir.if, cir.switch, cir.do, cir.while, cir.for'
    cir.return %arg0 : !s32i
```
the parent after lowering is `llvm.func`.
And this is only the beginning - the more operations will be flatten,
the more similar fails will happen. Thus, I added lowering for the
unreachable code as well in `LowerToLLVM.cpp`. But may be you have
another solution in your mind.

2) Please, pay attention on the flattening pass - I'm not that familiar
with `mlir` builders as you are, so may be I'm doing something wrong.
The idea was to start flattening from the most nested operations.

3) As you requested in llvm#516, `cir-to-llvm-internal` is renamed to
`cir-flat-to-llvm`. The only thing remain undone is related to the
following:

> Since it would be wrong to run cir-flat-to-llvm without running
cir-flatten-cfg, we should make cir-flat-to-llvm pass to require
cir-flatten-cfg pass to be run before.

And I'm not sure I know how to do it exactly - is there something
similar to pass dependencies from LLVM IR?

4) The part of `IfOp` lowering related to elimination of the vain casts
for condition branch moved directly to the lowering of `BrCondOp` with
some refactoring and guarding.

5) Just note, that now `cir-opt` is able to dump the flat cir as well:
`cir-opt -cir-flat-cfg`
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
duplicate Resolved as duplicate
Projects
None yet
Development

No branches or pull requests

3 participants