[InstCombine] Add a test case for suboptimal handling of (double (bitcast (<1 x i64...
authorCraig Topper <craig.topper@gmail.com>
Sun, 10 Nov 2019 08:34:32 +0000 (00:34 -0800)
committerCraig Topper <craig.topper@gmail.com>
Mon, 11 Nov 2019 00:25:25 +0000 (16:25 -0800)
The outer bitcast gets turned into an extractelement and another
bitcast rather than combining away to a single bitcast from mmx
to double.

llvm/test/Transforms/InstCombine/bitcast-vec-canon.ll

index ee77e06..486a785 100644 (file)
@@ -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
+}