From: Craig Topper Date: Sun, 10 Nov 2019 08:34:32 +0000 (-0800) Subject: [InstCombine] Add a test case for suboptimal handling of (double (bitcast (<1 x i64... X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d37db750c25dc3a7da66c97d973f7a64b7bf907b;p=platform%2Fupstream%2Fllvm.git [InstCombine] Add a test case for suboptimal handling of (double (bitcast (<1 x i64> (bitcast (x86_mmx))))) The outer bitcast gets turned into an extractelement and another bitcast rather than combining away to a single bitcast from mmx to double. --- diff --git a/llvm/test/Transforms/InstCombine/bitcast-vec-canon.ll b/llvm/test/Transforms/InstCombine/bitcast-vec-canon.ll index ee77e06..486a785 100644 --- a/llvm/test/Transforms/InstCombine/bitcast-vec-canon.ll +++ b/llvm/test/Transforms/InstCombine/bitcast-vec-canon.ll @@ -49,9 +49,22 @@ define x86_mmx @e(<1 x i64> %y) { define <1 x i64> @f(x86_mmx %y) { ; CHECK-LABEL: @f( -; CHECK-NEXT: [[C:%.*]] = bitcast x86_mmx %y to <1 x i64> +; CHECK-NEXT: [[C:%.*]] = bitcast x86_mmx [[Y:%.*]] to <1 x i64> ; CHECK-NEXT: ret <1 x i64> [[C]] ; %c = bitcast x86_mmx %y to <1 x i64> ret <1 x i64> %c } + +define double @g(x86_mmx %x) { +; CHECK-LABEL: @g( +; CHECK-NEXT: entry: +; CHECK-NEXT: [[BC:%.*]] = bitcast x86_mmx %x to <1 x double> +; CHECK-NEXT: [[TMP0:%.*]] = extractelement <1 x double> [[BC]], i32 0 +; CHECK-NEXT: ret double [[TMP0]] +; +entry: + %0 = bitcast x86_mmx %x to <1 x i64> + %1 = bitcast <1 x i64> %0 to double + ret double %1 +}