1eb197e3eSJannik Silvanus; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2eb197e3eSJannik Silvanus; RUN: opt -passes=instcombine -S %s | FileCheck %s --check-prefix=NATURAL 3eb197e3eSJannik Silvanus; RUN: opt --data-layout="i16:32" -passes=instcombine -S %s | FileCheck %s --check-prefix=OVERALIGNED 4eb197e3eSJannik Silvanus 5eb197e3eSJannik Silvanus; The data layouts are little endian, so @foo is 0x0123456789ABCDEF in memory. 6eb197e3eSJannik Silvanus@foo = constant <4 x i16> <i16 u0x2301, i16 u0x6745, i16 u0xAB89, i16 u0xEFCD>, align 8 7eb197e3eSJannik Silvanus 8eb197e3eSJannik Silvanusdeclare void @report(i64 %index, i8 %val) 9eb197e3eSJannik Silvanus 10eb197e3eSJannik Silvanusdefine void @test_vector_load_i8() { 11eb197e3eSJannik Silvanus; Access and report each individual byte in @foo. 12eb197e3eSJannik Silvanus; OVERALIGNED and NATURAL should have the same result, because the layout of vectors ignores 13eb197e3eSJannik Silvanus; element type alignment, and thus the representation of @foo is the same in both cases. 14eb197e3eSJannik Silvanus; NATURAL-LABEL: @test_vector_load_i8( 15eb197e3eSJannik Silvanus; NATURAL-NEXT: call void @report(i64 0, i8 1) 16eb197e3eSJannik Silvanus; NATURAL-NEXT: call void @report(i64 1, i8 35) 17eb197e3eSJannik Silvanus; NATURAL-NEXT: call void @report(i64 2, i8 69) 18eb197e3eSJannik Silvanus; NATURAL-NEXT: call void @report(i64 3, i8 103) 19eb197e3eSJannik Silvanus; NATURAL-NEXT: call void @report(i64 4, i8 -119) 20eb197e3eSJannik Silvanus; NATURAL-NEXT: call void @report(i64 5, i8 -85) 21eb197e3eSJannik Silvanus; NATURAL-NEXT: call void @report(i64 6, i8 -51) 22eb197e3eSJannik Silvanus; NATURAL-NEXT: call void @report(i64 7, i8 -17) 23eb197e3eSJannik Silvanus; NATURAL-NEXT: ret void 24eb197e3eSJannik Silvanus; 25eb197e3eSJannik Silvanus; OVERALIGNED-LABEL: @test_vector_load_i8( 26eb197e3eSJannik Silvanus; OVERALIGNED-NEXT: call void @report(i64 0, i8 1) 27eb197e3eSJannik Silvanus; OVERALIGNED-NEXT: call void @report(i64 1, i8 35) 28*f5dbbf49Skhei4; OVERALIGNED-NEXT: call void @report(i64 2, i8 69) 29*f5dbbf49Skhei4; OVERALIGNED-NEXT: call void @report(i64 3, i8 103) 30*f5dbbf49Skhei4; OVERALIGNED-NEXT: call void @report(i64 4, i8 -119) 31*f5dbbf49Skhei4; OVERALIGNED-NEXT: call void @report(i64 5, i8 -85) 32*f5dbbf49Skhei4; OVERALIGNED-NEXT: call void @report(i64 6, i8 -51) 33*f5dbbf49Skhei4; OVERALIGNED-NEXT: call void @report(i64 7, i8 -17) 34eb197e3eSJannik Silvanus; OVERALIGNED-NEXT: ret void 35eb197e3eSJannik Silvanus; 36eb197e3eSJannik Silvanus %ptr0 = getelementptr i8, ptr @foo, i64 0 37eb197e3eSJannik Silvanus %res0 = load i8, ptr %ptr0, align 1 38eb197e3eSJannik Silvanus call void @report(i64 0, i8 %res0) 39eb197e3eSJannik Silvanus 40eb197e3eSJannik Silvanus %ptr1 = getelementptr i8, ptr @foo, i64 1 41eb197e3eSJannik Silvanus %res1 = load i8, ptr %ptr1, align 1 42eb197e3eSJannik Silvanus call void @report(i64 1, i8 %res1) 43eb197e3eSJannik Silvanus 44eb197e3eSJannik Silvanus %ptr2 = getelementptr i8, ptr @foo, i64 2 45eb197e3eSJannik Silvanus %res2 = load i8, ptr %ptr2, align 1 46eb197e3eSJannik Silvanus call void @report(i64 2, i8 %res2) 47eb197e3eSJannik Silvanus 48eb197e3eSJannik Silvanus %ptr3 = getelementptr i8, ptr @foo, i64 3 49eb197e3eSJannik Silvanus %res3 = load i8, ptr %ptr3, align 1 50eb197e3eSJannik Silvanus call void @report(i64 3, i8 %res3) 51eb197e3eSJannik Silvanus 52eb197e3eSJannik Silvanus %ptr4 = getelementptr i8, ptr @foo, i64 4 53eb197e3eSJannik Silvanus %res4 = load i8, ptr %ptr4, align 1 54eb197e3eSJannik Silvanus call void @report(i64 4, i8 %res4) 55eb197e3eSJannik Silvanus 56eb197e3eSJannik Silvanus %ptr5 = getelementptr i8, ptr @foo, i64 5 57eb197e3eSJannik Silvanus %res5 = load i8, ptr %ptr5, align 1 58eb197e3eSJannik Silvanus call void @report(i64 5, i8 %res5) 59eb197e3eSJannik Silvanus 60eb197e3eSJannik Silvanus %ptr6 = getelementptr i8, ptr @foo, i64 6 61eb197e3eSJannik Silvanus %res6 = load i8, ptr %ptr6, align 1 62eb197e3eSJannik Silvanus call void @report(i64 6, i8 %res6) 63eb197e3eSJannik Silvanus 64eb197e3eSJannik Silvanus %ptr7 = getelementptr i8, ptr @foo, i64 7 65eb197e3eSJannik Silvanus %res7 = load i8, ptr %ptr7, align 1 66eb197e3eSJannik Silvanus call void @report(i64 7, i8 %res7) 67eb197e3eSJannik Silvanus 68eb197e3eSJannik Silvanus ret void 69eb197e3eSJannik Silvanus} 70