Lines Matching defs:memptr

277 // Test memptr emission in a constant expression.
312 // Try a reinterpret_cast followed by a memptr conversion.
374 int POD::*memptr;
375 memptr = &POD::a;
376 memptr = &POD::b;
377 if (memptr)
378 memptr = 0;
381 // CHECK: %[[memptr:.*]] = alloca i32, align 4
382 // CHECK-NEXT: store i32 0, ptr %[[memptr]], align 4
383 // CHECK-NEXT: store i32 4, ptr %[[memptr]], align 4
384 // CHECK-NEXT: %[[memptr_val:.*]] = load i32, ptr %[[memptr]], align 4
387 // CHECK: store i32 -1, ptr %[[memptr]], align 4
393 int Polymorphic::*memptr;
394 memptr = &Polymorphic::a;
395 memptr = &Polymorphic::b;
396 if (memptr)
397 memptr = 0;
401 // CHECK: %[[memptr:.*]] = alloca i32, align 4
402 // CHECK-NEXT: store i32 4, ptr %[[memptr]], align 4
403 // CHECK-NEXT: store i32 8, ptr %[[memptr]], align 4
404 // CHECK-NEXT: %[[memptr_val:.*]] = load i32, ptr %[[memptr]], align 4
407 // CHECK: store i32 0, ptr %[[memptr]], align 4
446 int loadDataMemberPointerVirtual(Virtual *o, int Virtual::*memptr) {
447 return o->*memptr;
452 // CHECK: %[[memptr:.*]] = load { i32, i32 }, ptr %{{.*}}, align 4
453 // CHECK: %[[memptr0:.*]] = extractvalue { i32, i32 } %[[memptr:.*]], 0
454 // CHECK: %[[memptr1:.*]] = extractvalue { i32, i32 } %[[memptr:.*]], 1
466 // A two-field data memptr on x64 gets coerced to i64 and is passed in a
469 // X64: (ptr noundef %o, i64 %memptr.coerce)
472 int loadDataMemberPointerUnspecified(Unspecified *o, int Unspecified::*memptr) {
473 return o->*memptr;
478 // CHECK: %[[memptr:.*]] = load { i32, i32, i32 }, ptr %{{.*}}, align 4
479 // CHECK: %[[memptr0:.*]] = extractvalue { i32, i32, i32 } %[[memptr:.*]], 0
480 // CHECK: %[[memptr1:.*]] = extractvalue { i32, i32, i32 } %[[memptr:.*]], 1
481 // CHECK: %[[memptr2:.*]] = extractvalue { i32, i32, i32 } %[[memptr:.*]], 2
501 void callMemberPointerSingle(Single *o, void (Single::*memptr)()) {
502 (o->*memptr)();
510 // X64: (ptr noundef %o, ptr %memptr)
514 void callMemberPointerMultiple(Multiple *o, void (Multiple::*memptr)()) {
515 (o->*memptr)();
525 void callMemberPointerVirtualBase(Virtual *o, void (Virtual::*memptr)()) {
526 (o->*memptr)();
649 // memptr.convert: ; preds = %entry
654 // memptr.converted: ; preds = %memptr.convert, %entry
665 // lib/CodeGen/Targets/X86.cpp with how we classify memptr types for returns.
674 // memptr.convert: ; preds = %entry
678 // memptr.converted: ; preds = %memptr.convert, %entry
699 // memptr.convert: ; preds = %entry
713 // memptr.converted: ; preds = %memptr.convert, %entry