1; RUN: opt < %s -reassociate -S | FileCheck %s 2 3; Canonicalize operands, but don't optimize floating point vector operations. 4define <4 x float> @test1() { 5; CHECK-LABEL: test1 6; CHECK-NEXT: %tmp1 = fsub fast <4 x float> zeroinitializer, zeroinitializer 7; CHECK-NEXT: %tmp2 = fmul fast <4 x float> %tmp1, zeroinitializer 8 9 %tmp1 = fsub fast <4 x float> zeroinitializer, zeroinitializer 10 %tmp2 = fmul fast <4 x float> zeroinitializer, %tmp1 11 ret <4 x float> %tmp2 12} 13 14; Commute integer vector operations. 15define <2 x i32> @test2(<2 x i32> %x, <2 x i32> %y) { 16; CHECK-LABEL: test2 17; CHECK-NEXT: %tmp1 = add <2 x i32> %x, %y 18; CHECK-NEXT: %tmp2 = add <2 x i32> %x, %y 19; CHECK-NEXT: %tmp3 = add <2 x i32> %tmp1, %tmp2 20 21 %tmp1 = add <2 x i32> %x, %y 22 %tmp2 = add <2 x i32> %y, %x 23 %tmp3 = add <2 x i32> %tmp1, %tmp2 24 ret <2 x i32> %tmp3 25} 26 27define <2 x i32> @test3(<2 x i32> %x, <2 x i32> %y) { 28; CHECK-LABEL: test3 29; CHECK-NEXT: %tmp1 = mul <2 x i32> %x, %y 30; CHECK-NEXT: %tmp2 = mul <2 x i32> %x, %y 31; CHECK-NEXT: %tmp3 = mul <2 x i32> %tmp1, %tmp2 32 33 %tmp1 = mul <2 x i32> %x, %y 34 %tmp2 = mul <2 x i32> %y, %x 35 %tmp3 = mul <2 x i32> %tmp1, %tmp2 36 ret <2 x i32> %tmp3 37} 38 39define <2 x i32> @test4(<2 x i32> %x, <2 x i32> %y) { 40; CHECK-LABEL: test4 41; CHECK-NEXT: %tmp1 = and <2 x i32> %x, %y 42; CHECK-NEXT: %tmp2 = and <2 x i32> %x, %y 43; CHECK-NEXT: %tmp3 = and <2 x i32> %tmp1, %tmp2 44 45 %tmp1 = and <2 x i32> %x, %y 46 %tmp2 = and <2 x i32> %y, %x 47 %tmp3 = and <2 x i32> %tmp1, %tmp2 48 ret <2 x i32> %tmp3 49} 50 51define <2 x i32> @test5(<2 x i32> %x, <2 x i32> %y) { 52; CHECK-LABEL: test5 53; CHECK-NEXT: %tmp1 = or <2 x i32> %x, %y 54; CHECK-NEXT: %tmp2 = or <2 x i32> %x, %y 55; CHECK-NEXT: %tmp3 = or <2 x i32> %tmp1, %tmp2 56 57 %tmp1 = or <2 x i32> %x, %y 58 %tmp2 = or <2 x i32> %y, %x 59 %tmp3 = or <2 x i32> %tmp1, %tmp2 60 ret <2 x i32> %tmp3 61} 62 63define <2 x i32> @test6(<2 x i32> %x, <2 x i32> %y) { 64; CHECK-LABEL: test6 65; CHECK-NEXT: %tmp1 = xor <2 x i32> %x, %y 66; CHECK-NEXT: %tmp2 = xor <2 x i32> %x, %y 67; CHECK-NEXT: %tmp3 = xor <2 x i32> %tmp1, %tmp2 68 69 %tmp1 = xor <2 x i32> %x, %y 70 %tmp2 = xor <2 x i32> %y, %x 71 %tmp3 = xor <2 x i32> %tmp1, %tmp2 72 ret <2 x i32> %tmp3 73} 74