summaryrefslogtreecommitdiffstats
path: root/llvm/test/Instrumentation/EfficiencySanitizer/struct_field_gep.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Instrumentation/EfficiencySanitizer/struct_field_gep.ll')
-rw-r--r--llvm/test/Instrumentation/EfficiencySanitizer/struct_field_gep.ll38
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/test/Instrumentation/EfficiencySanitizer/struct_field_gep.ll b/llvm/test/Instrumentation/EfficiencySanitizer/struct_field_gep.ll
new file mode 100644
index 00000000000..5365df4273e
--- /dev/null
+++ b/llvm/test/Instrumentation/EfficiencySanitizer/struct_field_gep.ll
@@ -0,0 +1,38 @@
+; Test the complex GetElementPtr instruction handling in the EfficiencySanitizer
+; cache fragmentation tool.
+;
+; RUN: opt < %s -esan -esan-cache-frag -S | FileCheck %s
+
+; Code from http://llvm.org/docs/LangRef.html#getelementptr-instruction
+; struct RT {
+; char A;
+; int B[10][20];
+; char C;
+; };
+; struct ST {
+; int X;
+; double Y;
+; struct RT Z;
+; };
+;
+; int *foo(struct ST *s) {
+; return &s[1].Z.B[5][13];
+; }
+
+%struct.RT = type { i8, [10 x [20 x i32]], i8 }
+%struct.ST = type { i32, double, %struct.RT }
+
+define i32* @foo(%struct.ST* %s) nounwind uwtable readnone optsize ssp {
+entry:
+ %arrayidx = getelementptr inbounds %struct.ST, %struct.ST* %s, i64 1, i32 2, i32 1, i64 5, i64 13
+ ret i32* %arrayidx
+}
+
+; CHECK: %0 = load i64, i64* getelementptr inbounds ([3 x i64], [3 x i64]* @"struct.ST#3#13#3#11", i32 0, i32 2)
+; CHECK-NEXT: %1 = add i64 %0, 1
+; CHECK-NEXT: store i64 %1, i64* getelementptr inbounds ([3 x i64], [3 x i64]* @"struct.ST#3#13#3#11", i32 0, i32 2)
+; CHECK-NEXT: %2 = load i64, i64* getelementptr inbounds ([3 x i64], [3 x i64]* @"struct.RT#3#11#14#11", i32 0, i32 1)
+; CHECK-NEXT: %3 = add i64 %2, 1
+; CHECK-NEXT: store i64 %3, i64* getelementptr inbounds ([3 x i64], [3 x i64]* @"struct.RT#3#11#14#11", i32 0, i32 1)
+; CHECK-NEXT: %arrayidx = getelementptr inbounds %struct.ST, %struct.ST* %s, i64 1, i32 2, i32 1, i64 5, i64 13
+; CHECK-NEXT: ret i32* %arrayidx
OpenPOWER on IntegriCloud