1; RUN: opt -passes=mergefunc -S < %s | FileCheck %s 2target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 3 4; These should not be merged, the type of the GEP pointer argument does not have 5; the same stride. 6 7%"struct1" = type <{ ptr, i32, [4 x i8] }> 8%"struct2" = type { ptr, { i64, i64 } } 9 10define internal ptr @Ffunc(ptr %P, i64 %i) { 11; CHECK-LABEL: @Ffunc( 12; CHECK-NEXT: getelementptr 13; CHECK-NEXT: getelementptr 14; CHECK-NEXT: getelementptr 15; CHECK-NEXT: getelementptr 16; CHECK-NEXT: getelementptr 17; CHECK-NEXT: getelementptr 18; CHECK-NEXT: ret 19 %1 = getelementptr inbounds %"struct2", ptr %P, i64 %i 20 %2 = getelementptr inbounds %"struct2", ptr %P, i64 %i 21 %3 = getelementptr inbounds %"struct2", ptr %P, i64 %i 22 %4 = getelementptr inbounds %"struct2", ptr %P, i64 %i 23 %5 = getelementptr inbounds %"struct2", ptr %P, i64 %i 24 %6 = getelementptr inbounds %"struct2", ptr %P, i64 %i 25 ret ptr %6 26} 27 28 29define internal ptr @Gfunc(ptr %P, i64 %i) { 30; CHECK-LABEL: @Gfunc( 31; CHECK-NEXT: getelementptr 32; CHECK-NEXT: getelementptr 33; CHECK-NEXT: getelementptr 34; CHECK-NEXT: getelementptr 35; CHECK-NEXT: getelementptr 36; CHECK-NEXT: getelementptr 37; CHECK-NEXT: ret 38 %1 = getelementptr inbounds %"struct1", ptr %P, i64 %i 39 %2 = getelementptr inbounds %"struct1", ptr %P, i64 %i 40 %3 = getelementptr inbounds %"struct1", ptr %P, i64 %i 41 %4 = getelementptr inbounds %"struct1", ptr %P, i64 %i 42 %5 = getelementptr inbounds %"struct1", ptr %P, i64 %i 43 %6 = getelementptr inbounds %"struct1", ptr %P, i64 %i 44 ret ptr %6 45} 46 47