271 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin19.6.0 | FileCheck %s --check-prefix=SSE23; RUN: llc < %s -mtriple=x86_64-apple-darwin19.6.0 -mattr=avx | FileCheck %s --check-prefix=AVX4; RUN: llc < %s -mtriple=x86_64-apple-darwin19.6.0 -mattr=avx512f | FileCheck %s --check-prefix=AVX5 6define void @a(ptr %arg, i32 %arg1) {7; SSE2-LABEL: a:8; SSE2: ## %bb.0: ## %bb9; SSE2-NEXT: testl %esi, %esi10; SSE2-NEXT: jle LBB0_311; SSE2-NEXT: ## %bb.1: ## %bb212; SSE2-NEXT: movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill13; SSE2-NEXT: movl %esi, %eax14; SSE2-NEXT: .p2align 415; SSE2-NEXT: LBB0_2: ## %bb616; SSE2-NEXT: ## =>This Inner Loop Header: Depth=117; SSE2-NEXT: ## InlineAsm Start18; SSE2-NEXT: ## InlineAsm End19; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero20; SSE2-NEXT: addss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 4-byte Folded Reload21; SSE2-NEXT: movss %xmm0, (%rdi)22; SSE2-NEXT: addq $4, %rdi23; SSE2-NEXT: decq %rax24; SSE2-NEXT: jne LBB0_225; SSE2-NEXT: LBB0_3: ## %bb526; SSE2-NEXT: retq27;28; AVX-LABEL: a:29; AVX: ## %bb.0: ## %bb30; AVX-NEXT: testl %esi, %esi31; AVX-NEXT: jle LBB0_332; AVX-NEXT: ## %bb.1: ## %bb233; AVX-NEXT: movl %esi, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill34; AVX-NEXT: movl %esi, %eax35; AVX-NEXT: .p2align 436; AVX-NEXT: LBB0_2: ## %bb637; AVX-NEXT: ## =>This Inner Loop Header: Depth=138; AVX-NEXT: ## InlineAsm Start39; AVX-NEXT: ## InlineAsm End40; AVX-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 4-byte Reload41; AVX-NEXT: ## xmm0 = mem[0],zero,zero,zero42; AVX-NEXT: vaddss (%rdi), %xmm0, %xmm043; AVX-NEXT: vmovss %xmm0, (%rdi)44; AVX-NEXT: addq $4, %rdi45; AVX-NEXT: decq %rax46; AVX-NEXT: jne LBB0_247; AVX-NEXT: LBB0_3: ## %bb548; AVX-NEXT: retq49bb:50 %i = icmp sgt i32 %arg1, 051 br i1 %i, label %bb2, label %bb552 53bb2: ; preds = %bb54 %i3 = bitcast i32 %arg1 to float55 %i4 = zext i32 %arg1 to i6456 br label %bb657 58bb5: ; preds = %bb6, %bb59 ret void60 61bb6: ; preds = %bb6, %bb262 %i7 = phi i64 [ 0, %bb2 ], [ %i11, %bb6 ]63 tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()64 %i8 = getelementptr inbounds float, ptr %arg, i64 %i765 %i9 = load float, ptr %i8, align 466 %i10 = fadd float %i9, %i367 store float %i10, ptr %i8, align 468 %i11 = add nuw nsw i64 %i7, 169 %i12 = icmp eq i64 %i11, %i470 br i1 %i12, label %bb5, label %bb671}72 73define void @b(ptr %arg, i64 %arg1) {74; SSE2-LABEL: b:75; SSE2: ## %bb.0: ## %bb76; SSE2-NEXT: testq %rsi, %rsi77; SSE2-NEXT: jle LBB1_378; SSE2-NEXT: ## %bb.1: ## %bb279; SSE2-NEXT: movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill80; SSE2-NEXT: .p2align 481; SSE2-NEXT: LBB1_2: ## %bb682; SSE2-NEXT: ## =>This Inner Loop Header: Depth=183; SSE2-NEXT: ## InlineAsm Start84; SSE2-NEXT: ## InlineAsm End85; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero86; SSE2-NEXT: addsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 8-byte Folded Reload87; SSE2-NEXT: movsd %xmm0, (%rdi)88; SSE2-NEXT: addq $8, %rdi89; SSE2-NEXT: decq %rsi90; SSE2-NEXT: jne LBB1_291; SSE2-NEXT: LBB1_3: ## %bb592; SSE2-NEXT: retq93;94; AVX-LABEL: b:95; AVX: ## %bb.0: ## %bb96; AVX-NEXT: testq %rsi, %rsi97; AVX-NEXT: jle LBB1_398; AVX-NEXT: ## %bb.1: ## %bb299; AVX-NEXT: movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill100; AVX-NEXT: .p2align 4101; AVX-NEXT: LBB1_2: ## %bb6102; AVX-NEXT: ## =>This Inner Loop Header: Depth=1103; AVX-NEXT: ## InlineAsm Start104; AVX-NEXT: ## InlineAsm End105; AVX-NEXT: vmovsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 8-byte Reload106; AVX-NEXT: ## xmm0 = mem[0],zero107; AVX-NEXT: vaddsd (%rdi), %xmm0, %xmm0108; AVX-NEXT: vmovsd %xmm0, (%rdi)109; AVX-NEXT: addq $8, %rdi110; AVX-NEXT: decq %rsi111; AVX-NEXT: jne LBB1_2112; AVX-NEXT: LBB1_3: ## %bb5113; AVX-NEXT: retq114bb:115 %i = icmp sgt i64 %arg1, 0116 br i1 %i, label %bb2, label %bb5117 118bb2: ; preds = %bb119 %i3 = bitcast i64 %arg1 to double120 br label %bb6121 122bb5: ; preds = %bb6, %bb123 ret void124 125bb6: ; preds = %bb6, %bb2126 %i7 = phi i64 [ 0, %bb2 ], [ %i11, %bb6 ]127 tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()128 %i8 = getelementptr inbounds double, ptr %arg, i64 %i7129 %i9 = load double, ptr %i8, align 4130 %i10 = fadd double %i9, %i3131 store double %i10, ptr %i8, align 4132 %i11 = add nuw nsw i64 %i7, 1133 %i12 = icmp eq i64 %i11, %arg1134 br i1 %i12, label %bb5, label %bb6135}136 137define void @c(ptr %arg, ptr %arg1, i32 %arg2) {138; SSE2-LABEL: c:139; SSE2: ## %bb.0: ## %bb140; SSE2-NEXT: testl %edx, %edx141; SSE2-NEXT: jle LBB2_3142; SSE2-NEXT: ## %bb.1: ## %bb4143; SSE2-NEXT: movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill144; SSE2-NEXT: movl %edx, %eax145; SSE2-NEXT: .p2align 4146; SSE2-NEXT: LBB2_2: ## %bb8147; SSE2-NEXT: ## =>This Inner Loop Header: Depth=1148; SSE2-NEXT: ## InlineAsm Start149; SSE2-NEXT: ## InlineAsm End150; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero151; SSE2-NEXT: addss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 4-byte Folded Reload152; SSE2-NEXT: movss %xmm0, (%rdi)153; SSE2-NEXT: addq $16, %rdi154; SSE2-NEXT: decq %rax155; SSE2-NEXT: jne LBB2_2156; SSE2-NEXT: LBB2_3: ## %bb7157; SSE2-NEXT: retq158;159; AVX-LABEL: c:160; AVX: ## %bb.0: ## %bb161; AVX-NEXT: testl %edx, %edx162; AVX-NEXT: jle LBB2_3163; AVX-NEXT: ## %bb.1: ## %bb4164; AVX-NEXT: movl %edx, {{[-0-9]+}}(%r{{[sb]}}p) ## 4-byte Spill165; AVX-NEXT: movl %edx, %eax166; AVX-NEXT: .p2align 4167; AVX-NEXT: LBB2_2: ## %bb8168; AVX-NEXT: ## =>This Inner Loop Header: Depth=1169; AVX-NEXT: ## InlineAsm Start170; AVX-NEXT: ## InlineAsm End171; AVX-NEXT: vmovss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 4-byte Reload172; AVX-NEXT: ## xmm0 = mem[0],zero,zero,zero173; AVX-NEXT: vaddss (%rdi), %xmm0, %xmm0174; AVX-NEXT: vmovss %xmm0, (%rdi)175; AVX-NEXT: addq $16, %rdi176; AVX-NEXT: decq %rax177; AVX-NEXT: jne LBB2_2178; AVX-NEXT: LBB2_3: ## %bb7179; AVX-NEXT: retq180bb:181 %i = icmp sgt i32 %arg2, 0182 br i1 %i, label %bb4, label %bb7183 184bb4: ; preds = %bb185 %i5 = bitcast i32 %arg2 to float186 %i6 = zext i32 %arg2 to i64187 br label %bb8188 189bb7: ; preds = %bb8, %bb190 ret void191 192bb8: ; preds = %bb8, %bb4193 %i9 = phi i64 [ 0, %bb4 ], [ %i15, %bb8 ]194 tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()195 %i10 = getelementptr inbounds <4 x float>, ptr %arg, i64 %i9196 %i11 = load <4 x float>, ptr %i10, align 16197 %i12 = extractelement <4 x float> %i11, i32 0198 %i13 = fadd float %i12, %i5199 %i14 = insertelement <4 x float> %i11, float %i13, i32 0200 store <4 x float> %i14, ptr %i10, align 16201 %i15 = add nuw nsw i64 %i9, 1202 %i16 = icmp eq i64 %i15, %i6203 br i1 %i16, label %bb7, label %bb8204}205 206define void @d(ptr %arg, ptr %arg1, i64 %arg2) {207; SSE2-LABEL: d:208; SSE2: ## %bb.0: ## %bb209; SSE2-NEXT: testq %rdx, %rdx210; SSE2-NEXT: jle LBB3_3211; SSE2-NEXT: ## %bb.1: ## %bb3212; SSE2-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill213; SSE2-NEXT: .p2align 4214; SSE2-NEXT: LBB3_2: ## %bb6215; SSE2-NEXT: ## =>This Inner Loop Header: Depth=1216; SSE2-NEXT: ## InlineAsm Start217; SSE2-NEXT: ## InlineAsm End218; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero219; SSE2-NEXT: addsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 8-byte Folded Reload220; SSE2-NEXT: movsd %xmm0, (%rdi)221; SSE2-NEXT: addq $16, %rdi222; SSE2-NEXT: decq %rdx223; SSE2-NEXT: jne LBB3_2224; SSE2-NEXT: LBB3_3: ## %bb5225; SSE2-NEXT: retq226;227; AVX-LABEL: d:228; AVX: ## %bb.0: ## %bb229; AVX-NEXT: testq %rdx, %rdx230; AVX-NEXT: jle LBB3_3231; AVX-NEXT: ## %bb.1: ## %bb3232; AVX-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) ## 8-byte Spill233; AVX-NEXT: .p2align 4234; AVX-NEXT: LBB3_2: ## %bb6235; AVX-NEXT: ## =>This Inner Loop Header: Depth=1236; AVX-NEXT: ## InlineAsm Start237; AVX-NEXT: ## InlineAsm End238; AVX-NEXT: vmovsd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 ## 8-byte Reload239; AVX-NEXT: ## xmm0 = mem[0],zero240; AVX-NEXT: vaddsd (%rdi), %xmm0, %xmm0241; AVX-NEXT: vmovsd %xmm0, (%rdi)242; AVX-NEXT: addq $16, %rdi243; AVX-NEXT: decq %rdx244; AVX-NEXT: jne LBB3_2245; AVX-NEXT: LBB3_3: ## %bb5246; AVX-NEXT: retq247bb:248 %i = icmp sgt i64 %arg2, 0249 br i1 %i, label %bb3, label %bb5250 251bb3: ; preds = %bb252 %i4 = bitcast i64 %arg2 to double253 br label %bb6254 255bb5: ; preds = %bb6, %bb256 ret void257 258bb6: ; preds = %bb6, %bb3259 %i7 = phi i64 [ 0, %bb3 ], [ %i13, %bb6 ]260 tail call void asm sideeffect "", "~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{dirflag},~{fpsr},~{flags}"()261 %i8 = getelementptr inbounds <2 x double>, ptr %arg, i64 %i7262 %i9 = load <2 x double>, ptr %i8, align 16263 %i10 = extractelement <2 x double> %i9, i32 0264 %i11 = fadd double %i10, %i4265 %i12 = insertelement <2 x double> %i9, double %i11, i32 0266 store <2 x double> %i12, ptr %i8, align 16267 %i13 = add nuw nsw i64 %i7, 1268 %i14 = icmp eq i64 %i13, %arg2269 br i1 %i14, label %bb5, label %bb6270}271