| 
 | 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5  | 
 | 2 | +; RUN: opt -S < %s -passes=instcombine | FileCheck %s  | 
 | 3 | + | 
 | 4 | +%struct.double2 = type { double, double }  | 
 | 5 | +%struct.double1 = type { double }  | 
 | 6 | + | 
 | 7 | +define %struct.double2 @func1(ptr addrspace(1) %a) {  | 
 | 8 | +; CHECK-LABEL: define %struct.double2 @func1(  | 
 | 9 | +; CHECK-SAME: ptr addrspace(1) [[A:%.*]]) {  | 
 | 10 | +; CHECK-NEXT:    [[DOTUNPACK:%.*]] = load double, ptr addrspace(1) [[A]], align 16, !invariant.load [[META0:![0-9]+]]  | 
 | 11 | +; CHECK-NEXT:    [[TMP1:%.*]] = insertvalue [[STRUCT_DOUBLE2:%.*]] poison, double [[DOTUNPACK]], 0  | 
 | 12 | +; CHECK-NEXT:    [[DOTELT1:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(1) [[A]], i64 8  | 
 | 13 | +; CHECK-NEXT:    [[DOTUNPACK2:%.*]] = load double, ptr addrspace(1) [[DOTELT1]], align 8, !invariant.load [[META0]]  | 
 | 14 | +; CHECK-NEXT:    [[TMP2:%.*]] = insertvalue [[STRUCT_DOUBLE2]] [[TMP1]], double [[DOTUNPACK2]], 1  | 
 | 15 | +; CHECK-NEXT:    ret [[STRUCT_DOUBLE2]] [[TMP2]]  | 
 | 16 | +;  | 
 | 17 | +  %1 = load %struct.double2, ptr addrspace(1) %a, align 16, !invariant.load !1  | 
 | 18 | +  ret %struct.double2 %1  | 
 | 19 | +}  | 
 | 20 | + | 
 | 21 | +define %struct.double2 @func2(ptr %a) {  | 
 | 22 | +; CHECK-LABEL: define %struct.double2 @func2(  | 
 | 23 | +; CHECK-SAME: ptr [[A:%.*]]) {  | 
 | 24 | +; CHECK-NEXT:    [[DOTUNPACK:%.*]] = load double, ptr [[A]], align 16, !invariant.load [[META0]]  | 
 | 25 | +; CHECK-NEXT:    [[TMP1:%.*]] = insertvalue [[STRUCT_DOUBLE2:%.*]] poison, double [[DOTUNPACK]], 0  | 
 | 26 | +; CHECK-NEXT:    [[DOTELT1:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i64 8  | 
 | 27 | +; CHECK-NEXT:    [[DOTUNPACK2:%.*]] = load double, ptr [[DOTELT1]], align 8, !invariant.load [[META0]]  | 
 | 28 | +; CHECK-NEXT:    [[TMP2:%.*]] = insertvalue [[STRUCT_DOUBLE2]] [[TMP1]], double [[DOTUNPACK2]], 1  | 
 | 29 | +; CHECK-NEXT:    ret [[STRUCT_DOUBLE2]] [[TMP2]]  | 
 | 30 | +;  | 
 | 31 | +  %1 = load %struct.double2, ptr %a, align 16, !invariant.load !1  | 
 | 32 | +  ret %struct.double2 %1  | 
 | 33 | +}  | 
 | 34 | + | 
 | 35 | +define %struct.double1 @func3(ptr %a) {  | 
 | 36 | +; CHECK-LABEL: define %struct.double1 @func3(  | 
 | 37 | +; CHECK-SAME: ptr [[A:%.*]]) {  | 
 | 38 | +; CHECK-NEXT:    [[DOTUNPACK:%.*]] = load double, ptr [[A]], align 16, !invariant.load [[META0]]  | 
 | 39 | +; CHECK-NEXT:    [[TMP1:%.*]] = insertvalue [[STRUCT_DOUBLE1:%.*]] poison, double [[DOTUNPACK]], 0  | 
 | 40 | +; CHECK-NEXT:    ret [[STRUCT_DOUBLE1]] [[TMP1]]  | 
 | 41 | +;  | 
 | 42 | +  %1 = load %struct.double1, ptr %a, align 16, !invariant.load !1  | 
 | 43 | +  ret %struct.double1 %1  | 
 | 44 | +}  | 
 | 45 | + | 
 | 46 | +!1 = !{}  | 
0 commit comments