tianshilei1992 added a comment.

I will refine some logics to set `X`, `E`, etc. to avoid more `IgnoreImpCasts`. 
However, I don't know how to deal with type promotion in the condition 
statement. Here we consider the following case:

  if (x == e) { x = d; }

`x` and `d` can be set easily w/o need of `IgnoreImpCasts`. When it comes to 
`e`, things become complicated. There are basically three cases:

1. `x` and `e` are not promoted. That is the case when `x` and `e` are of same 
type, and they are both at least `int`. In this case, we don't need 
`IgnoreImpCasts` here. If they are of the same with shorter representation, 
such as `int16_t`, they will all be promoted, which will be mentioned later.
2. `x` is not promoted, but `e` is promoted. That is the case when `x` has 
higher ranking than `e`. In this case, we should not use `IgnoreImpCasts`.
3. Both `x` and `e` are promoted. This case is very common, and it can be 
further divided into following cases:
  - `x` and `e` of the same type with lower ranking. For example, when `x` and 
`e` are both `short`, they will be promoted to `int`. In this case, we want 
`IgnoreImpCasts`.
  - `x` and `e` are of different types, but they can be implicitly converted. 
For example, `x` is `int`, while `e` is `short`. In this case, we don't want 
`IgnoreImpCasts` because `e` is implicitly promoted to `int`, which is exactly 
what we want.

I'm thinking we may want to avoid using `IgnoreImpCasts` and later create cast 
if necessary. However, that may cause some unnecessary casts, at least in LLVM 
IR, such as the following case:

  %1 = load i8 *%e
  %2 = cast to i32 %1
  %3 = cast to i8 %2
  cmpxchg i8 * %x, i8 %3

I'm not sure eventually `%2` and `%3` will be optimized out.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126602/new/

https://reviews.llvm.org/D126602

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to