brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · c2b6240 Raw
70 lines · plain
1; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx | FileCheck %s2 3 4; rdar://131267635; Expression "x + x*x" was mistakenly transformed into "x * 3.0f".6 7define float @test1(float %x) {8; CHECK-LABEL: test1:9; CHECK:       ## %bb.0:10; CHECK-NEXT:    vmulss %xmm0, %xmm0, %xmm111; CHECK-NEXT:    vaddss %xmm0, %xmm1, %xmm012; CHECK-NEXT:    retq13  %t1 = fmul fast float %x, %x14  %t2 = fadd fast float %t1, %x15  ret float %t216}17 18; (x + x) + x => x * 3.019define float @test2(float %x) {20; CHECK-LABEL: test2:21; CHECK:       ## %bb.0:22; CHECK-NEXT:    vmulss {{.*}}(%rip), %xmm0, %xmm023; CHECK-NEXT:    retq24  %t1 = fadd fast float %x, %x25  %t2 = fadd fast float %t1, %x26  ret float %t227}28 29; x + (x + x) => x * 3.030define float @test3(float %x) {31; CHECK-LABEL: test3:32; CHECK:       ## %bb.0:33; CHECK-NEXT:    vmulss {{.*}}(%rip), %xmm0, %xmm034; CHECK-NEXT:    retq35  %t1 = fadd fast float %x, %x36  %t2 = fadd fast float %x, %t137  ret float %t238}39 40; (y + x) + x != x * 3.041define float @test4(float %x, float %y) {42; CHECK-LABEL: test4:43; CHECK:       ## %bb.0:44; CHECK-NEXT:    vaddss %xmm1, %xmm0, %xmm145; CHECK-NEXT:    vaddss %xmm0, %xmm1, %xmm046; CHECK-NEXT:    retq47  %t1 = fadd fast float %x, %y48  %t2 = fadd fast float %t1, %x49  ret float %t250}51 52; rdar://1344538753; "x + x + x => 3.0 * x" should be disabled after legalization because54; Instruction-Selection doesn't know how to handle "3.0"55;56define float @test5(<4 x float> %x) {57; CHECK-LABEL: test5:58; CHECK:       ## %bb.0:59; CHECK-NEXT:    vmulss {{.*}}(%rip), %xmm0, %xmm060; CHECK-NEXT:    retq61  %splat = shufflevector <4 x float> %x, <4 x float> undef, <4 x i32> zeroinitializer62  %v1 = extractelement <4 x float> %splat, i32 163  %v0 = extractelement <4 x float> %splat, i32 064  %add1 = fadd reassoc nsz float %v0, %v165  %v2 = extractelement <4 x float> %splat, i32 266  %add2 = fadd reassoc nsz float %v2, %add167  ret float %add268}69 70