1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-- -mattr=+avx | FileCheck %s 3; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s 4 5define float @matching_scalar(ptr dereferenceable(16) %p) { 6; CHECK-LABEL: @matching_scalar( 7; CHECK-NEXT: [[R:%.*]] = load float, ptr [[P:%.*]], align 16 8; CHECK-NEXT: ret float [[R]] 9; 10 %r = load float, ptr %p, align 16 11 ret float %r 12} 13 14define i32 @nonmatching_scalar(ptr dereferenceable(16) %p) { 15; CHECK-LABEL: @nonmatching_scalar( 16; CHECK-NEXT: [[R:%.*]] = load i32, ptr [[P:%.*]], align 16 17; CHECK-NEXT: ret i32 [[R]] 18; 19 %r = load i32, ptr %p, align 16 20 ret i32 %r 21} 22 23define i64 @larger_scalar(ptr dereferenceable(16) %p) { 24; CHECK-LABEL: @larger_scalar( 25; CHECK-NEXT: [[R:%.*]] = load i64, ptr [[P:%.*]], align 16 26; CHECK-NEXT: ret i64 [[R]] 27; 28 %r = load i64, ptr %p, align 16 29 ret i64 %r 30} 31 32define i8 @smaller_scalar(ptr dereferenceable(16) %p) { 33; CHECK-LABEL: @smaller_scalar( 34; CHECK-NEXT: [[R:%.*]] = load i8, ptr [[P:%.*]], align 16 35; CHECK-NEXT: ret i8 [[R]] 36; 37 %r = load i8, ptr %p, align 16 38 ret i8 %r 39} 40 41define i8 @smaller_scalar_256bit_vec(ptr dereferenceable(32) %p) { 42; CHECK-LABEL: @smaller_scalar_256bit_vec( 43; CHECK-NEXT: [[R:%.*]] = load i8, ptr [[P:%.*]], align 32 44; CHECK-NEXT: ret i8 [[R]] 45; 46 %r = load i8, ptr %p, align 32 47 ret i8 %r 48} 49 50define i8 @smaller_scalar_less_aligned(ptr dereferenceable(16) %p) { 51; CHECK-LABEL: @smaller_scalar_less_aligned( 52; CHECK-NEXT: [[R:%.*]] = load i8, ptr [[P:%.*]], align 4 53; CHECK-NEXT: ret i8 [[R]] 54; 55 %r = load i8, ptr %p, align 4 56 ret i8 %r 57} 58 59define float @matching_scalar_small_deref(ptr dereferenceable(15) %p) { 60; CHECK-LABEL: @matching_scalar_small_deref( 61; CHECK-NEXT: [[R:%.*]] = load float, ptr [[P:%.*]], align 16 62; CHECK-NEXT: ret float [[R]] 63; 64 %r = load float, ptr %p, align 16 65 ret float %r 66} 67 68define float @matching_scalar_volatile(ptr dereferenceable(16) %p) { 69; CHECK-LABEL: @matching_scalar_volatile( 70; CHECK-NEXT: [[R:%.*]] = load volatile float, ptr [[P:%.*]], align 16 71; CHECK-NEXT: ret float [[R]] 72; 73 %r = load volatile float, ptr %p, align 16 74 ret float %r 75} 76 77define float @nonvector(ptr dereferenceable(16) %p) { 78; CHECK-LABEL: @nonvector( 79; CHECK-NEXT: [[R:%.*]] = load float, ptr [[P:%.*]], align 16 80; CHECK-NEXT: ret float [[R]] 81; 82 %r = load float, ptr %p, align 16 83 ret float %r 84} 85