Question about instcombine pass.

Hello, Everyone.

I have a question about llvm's "Combine redundant instructions(instcombine)" pass.

I have tested instcombine pass by writing the following three test cases.
But, CASE3 is not optimized as I expected.
Is this behavior expected?

The version of llvm is:
  clang version 5.0.1 (tags/RELEASE_501/final 325232)

Option of clang command is:
  clang -O1 a.c -S -emit-llvm -o -

TEST Programs:

(CASE1)
This case is optimized as I expected.