1d3a2436bSNikita Popov; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2d3a2436bSNikita Popov; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s 3d3a2436bSNikita Popov 4d3a2436bSNikita Popovdefine i32 @test_scalar(i32 %x) { 5d3a2436bSNikita Popov; CHECK-LABEL: test_scalar: 6d3a2436bSNikita Popov; CHECK: # %bb.0: 7d3a2436bSNikita Popov; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 8*fe4dbbb4SNikita Popov; CHECK-NEXT: leal (,%rdi,4), %eax 9d3a2436bSNikita Popov; CHECK-NEXT: retq 10d3a2436bSNikita Popov %mul = mul i32 %x, 3 11d3a2436bSNikita Popov %add = add i32 %mul, %x 12d3a2436bSNikita Popov ret i32 %add 13d3a2436bSNikita Popov} 14d3a2436bSNikita Popov 15d4a58442SNikita Popovdefine i32 @test_scalar_commuted(i32 %x) { 16d4a58442SNikita Popov; CHECK-LABEL: test_scalar_commuted: 17d4a58442SNikita Popov; CHECK: # %bb.0: 18d4a58442SNikita Popov; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 19*fe4dbbb4SNikita Popov; CHECK-NEXT: leal (,%rdi,4), %eax 20d4a58442SNikita Popov; CHECK-NEXT: retq 21d4a58442SNikita Popov %mul = mul i32 %x, 3 22d4a58442SNikita Popov %add = add i32 %x, %mul 23d4a58442SNikita Popov ret i32 %add 24d4a58442SNikita Popov} 25d4a58442SNikita Popov 26d3a2436bSNikita Popovdefine <4 x i32> @test_vector(<4 x i32> %x) { 27d3a2436bSNikita Popov; CHECK-LABEL: test_vector: 28d3a2436bSNikita Popov; CHECK: # %bb.0: 29*fe4dbbb4SNikita Popov; CHECK-NEXT: pslld $2, %xmm0 30d3a2436bSNikita Popov; CHECK-NEXT: retq 31d3a2436bSNikita Popov %mul = mul <4 x i32> %x, <i32 3, i32 3, i32 3, i32 3> 32d3a2436bSNikita Popov %add = add <4 x i32> %mul, %x 33d3a2436bSNikita Popov ret <4 x i32> %add 34d3a2436bSNikita Popov} 35d3a2436bSNikita Popov 36d3a2436bSNikita Popovdefine ptr @test_ptr(ptr %p) { 37d3a2436bSNikita Popov; CHECK-LABEL: test_ptr: 38d3a2436bSNikita Popov; CHECK: # %bb.0: 39*fe4dbbb4SNikita Popov; CHECK-NEXT: leaq (,%rdi,4), %rax 40d3a2436bSNikita Popov; CHECK-NEXT: retq 41d3a2436bSNikita Popov %addr = ptrtoint ptr %p to i64 42d3a2436bSNikita Popov %mul = mul i64 %addr, 3 43d3a2436bSNikita Popov %res = getelementptr i8, ptr %p, i64 %mul 44d3a2436bSNikita Popov ret ptr %res 45d3a2436bSNikita Popov} 46d3a2436bSNikita Popov 47d3a2436bSNikita Popovdefine i32 @test_extra_use(i32 %x, ptr %p) { 48d3a2436bSNikita Popov; CHECK-LABEL: test_extra_use: 49d3a2436bSNikita Popov; CHECK: # %bb.0: 50d3a2436bSNikita Popov; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 51d3a2436bSNikita Popov; CHECK-NEXT: leal (%rdi,%rdi,2), %eax 52d3a2436bSNikita Popov; CHECK-NEXT: movl %eax, (%rsi) 53d3a2436bSNikita Popov; CHECK-NEXT: addl %edi, %eax 54d3a2436bSNikita Popov; CHECK-NEXT: retq 55d3a2436bSNikita Popov %mul = mul i32 %x, 3 56d3a2436bSNikita Popov store i32 %mul, ptr %p 57d3a2436bSNikita Popov %add = add i32 %mul, %x 58d3a2436bSNikita Popov ret i32 %add 59d3a2436bSNikita Popov} 60d3a2436bSNikita Popov 61d3a2436bSNikita Popovdefine i32 @test_different_operand(i32 %x, i32 %y) { 62d3a2436bSNikita Popov; CHECK-LABEL: test_different_operand: 63d3a2436bSNikita Popov; CHECK: # %bb.0: 64d3a2436bSNikita Popov; CHECK-NEXT: # kill: def $edi killed $edi def $rdi 65d3a2436bSNikita Popov; CHECK-NEXT: leal (%rdi,%rdi,2), %eax 66d3a2436bSNikita Popov; CHECK-NEXT: addl %esi, %eax 67d3a2436bSNikita Popov; CHECK-NEXT: retq 68d3a2436bSNikita Popov %mul = mul i32 %x, 3 69d3a2436bSNikita Popov %add = add i32 %mul, %y 70d3a2436bSNikita Popov ret i32 %add 71d3a2436bSNikita Popov} 72